0

Form2 に DataGridView があり、form1 にテキストボックスがあります。DataGridView 行の 1 つをクリックすると、DataGridView コピーのすべてのセルが form1 の texboxes に表示されます。

テキストボックスのタイプを「public」に変更しようとした後、これをform2に書きました:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex < 0 || e.ColumnIndex < 0)
       return;

    Form1 fr1 = new Form1();
    fr1.textBox1.Text = "123";  
    Form2.ActiveForm.Close();
}

しかし、form1 の texbox1 には何もコピーされていません。

私を助けてください。

4

1 に答える 1

1

これはよくある間違いです。

この線

Form1 fr1 = new Form1(); 

Form1の新しいインスタンスを作成し、varfr1は表示された元のForm1を参照しません。
この種の問題を解決するには、Form1の元のインスタンスをForm2のコンストラクターに渡し、参照をグローバルインスタンス変数に保存し、その参照をform2内で使用する必要があります。例えば:

呼び出し:Form2 fr2 = new Form2(this)

FORM2コンストラクター:

public class Form2 : Form
{
     private Form1 _caller = null;

     public Form2(Form1 f1)
     { 
         _caller = f1;
     }
}

DATAGRIDVIEW_CELLCLICK

private void dataGridView1_CellClick(....)
{
    if (e.RowIndex < 0 || e.ColumnIndex < 0)     
       return;     

    _caller.textBox1.Text = "123";       
    this.Close();
}
于 2012-07-16T07:47:25.007 に答える