2011-01-31 13 views
0

変数を格納するために親フォームの変数を使用しようとしています。次のように親フォームのコードは次のとおりです。ユーザーがButton1を押すとWinForms継承されたフォームが親の変数を参照できない

public partial class Form1 : Form 
{ 
    internal string testVar; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     testVar = "button1"; 
     MessageBox.Show("testVar = " + testVar); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     Form2 newfrm = new Form2(); 
     newfrm.Show(); 
    } 
} 

そう、それは「ボタン1」に変数を設定します。ボタン2を押すと、次のように定義され、子フォームを起動します:

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

    private void button3_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show(base.testVar); 
    } 
} 

だから、ボタン3は、親フォーム内の内部変数の値を示しています。ただし、空白です(設定されているかどうかに関係なく)。子フォームが親の値を見ることができないのはなぜですか?

+0

は、あなたが 'testVar'中に何かを割り当てるよろしいですあなたの 'Form2'のインスタンス? – Vlad

答えて

1

親子フォームのインスタンスはそれぞれ独自のコピーを持つため、

この仕事(とそれを説明する)必要があります。

private void button2_Click(object sender, EventArgs e) 
{ 
     Form2 newfrm = new Form2(); 
     newFrm.testVar = this.testVar; 
     newfrm.Show(); 
} 
0

は、これら2つの別々のインスタンスです。 1つはメインフォーム、Form1のインスタンスで、testVar変数に値が設定されています。もう1つはセカンダリフォームで、Form1から派生したForm1のインスタンスですが、testVarの変数はではなく、に設定されています。

1

あなたのコードは親フォームにアクセスしません!現在クラスから継承されたForm1インスタンスインスタンスから継承された現在のオブジェクトの変数にアクセスするbase.testVarを使用しています。Form2インスタンスを作成しました。

たぶん、あなたは、次のような何かをしたい:

public partial class Form1 : Form 
{ 
    ... 
    private void button2_Click(object sender, EventArgs e) 
    { 
     Form2 newfrm = new Form2(); 
     newfrm.ParentForm = this; 
     newfrm.Show(); 
    } 
} 

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

    private void button3_Click(object sender, EventArgs e) 
    { 
     string v = (ParentForm != null) ? ParentForm.testVar : "<no parent set>"; 
     MessageBox.Show(v); 
    } 
    public Form1 ParentForm; 
} 

(。さて、あなたはあなたのParentFormのためのより良い保護を必要とします)

関連する問題