2011-01-03 23 views
4

私は2つのフォームを持っています。まず、Form1には、グループボックス、いくつかのラベル、リストボックスがあります。私はボタンを押して、新しいForm2が開かれ、いくつかのテキストが含まれています。 Form2のテキストをForm1のリストボックスに転送したいとします。フォーム間でデータを渡す

はこれまでのところ、私がやったことは公共にリストボックスの修正を行い、その後、Form2

Form1 frm = new Form1(); 
frm.ListBox.items.Add(textBox.Text); 

のボタンにこのコードを入れている。しかし、驚くほど、これは任意の値を追加しません。私は挿入と間違っていると思ったので、同じ手順をとった。今回はラベルを公開して、Textプロパティにテキストボックス値を追加しましたが、失敗しました。

アイデア?

+0

Windowsフォームですか? –

+1

エラーが生じますか? – paragy

+2

私はこのスニペットがコンパイルされてもっと驚いています。 –

答えて

2
Form1 frm = new Form1(); 

FRMは現在、クラスForm1の新しいインスタンスです。

frmは、ユーザーに表示されたForm1の元のインスタンスを参照していません。

解決策の1つは、Form2のインスタンスを作成するときに、Form1の現在のインスタンスへの参照を渡すことです。

5

2番目のフォーム(例:Form1)のコンストラクタにパラメータを追加し、その値をそのまま渡してみます。 InitializeComponent()が呼び出されると、パラメータをリストボックスに選択肢として追加できます。

public Form1(String customItem) 
{ 
    InitializeComponent(); 
    this.myListBox.Items.Add(customItem); 
} 

// In the original form's code: 
Form1 frm = new Form1(this.textBox.Text); 
4

以下のコードは私のマシンで完璧に動作します。あなたが順序を呼び出している場合は

private void button1_Click(object sender, EventArgs e) 
    { 
     Form1 f1 = new Form1(); 
     f1.listBox1.Items.Add(textBox1.Text);//ListBox1 : Modifier property made public 
     f1.ShowDialog(); 
    } 

[OK]を、であるように、Form1-> Form2をし、Form2のは、Form1の値を更新し、その後、あなたは前のフォームを更新するために、()またはDelegateParentFormを使用する必要があります。

+0

私はすでにフォームを再度表示しなければならない理由私はフォーム1からフォーム2に値を入力し、その値はフォーム1に更新する必要があります –

+0

修正された回答を確認してください。私がParentForm()やDelegateがここで働くと言ったように。 – paragy

0

このコードは、おそらくボタンクリックハンドラーの内側にあるmyListBoxを含むフォームの内部にあります。

Form2 frm2 = new Form2(); 
frm2.ShowDialog(); 
this.myListBox.Items.Add(frm2.myTextBox.Text); 
frm2.Dispose(); 
+0

新しいフォームが既に閉じられていない限り(ListBoxを作成する前にShowDialogを呼び出しているので)、リストボックスの変更は表示されません。コードは、ShowDialogからDialogResultを待ってから、引き続きリストボックス項目を追加して、すぐに破棄します。 –

1

あなたは 言ったように私が行っている>>すべてのパブリックメンバーを作るというコンセプトを避けてください。これは良い方法ではありません公共、その後のForm2でのボタンのコードで< < にリストボックスの修飾子を作るです一方、良いものはBrad Christieのポストにあります。私はあなたがそれを得たことを願っています。

+2

ようこそstackoverflowへ。あなたのコメント - 非常に良い点 - は、おそらく答えではなく、コメントでなければなりません。あなたが好きな答えをアップに投票してください。再び、歓迎! – Marvo

4

Form1がForm2を呼び出したとします。コードを見てください:

をForm1:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 frm = new Form2(); 
     frm.Show(); 
     frm.VisibleChanged += formVisibleChanged; 


    } 

    private void formVisibleChanged(object sender, EventArgs e) 
    { 
     Form2 frm = (Form2)sender; 
     if (!frm.Visible) 
     { 
      this.listBox1.Items.Add(frm.ReturnText); 
      frm.Dispose(); 
     } 


    } 

} 

のForm2:

public partial class Form2 : Form 
{ 

    public string ReturnText { get; set; } 

    public Form2() 
    { 
     InitializeComponent(); 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.ReturnText = this.textBox1.Text; 
     this.Visible = false; 

    } 


} 

答えはForm2をしてたときにフォームが隠されます上のパブリックプロパティを宣言することです。同じインスタンスにアクセスし、値を取得します。

関連する問題