2011-09-17 17 views
1

ここで私は問題に直面しています。フォームを動的にタブページに追加しています。 私はそのフォームから静的変数を取得する必要があります。フォームのタブページ内の変数へのアクセス

私はコードを使用しましたが、私は必要な正確な値を得ることができません。上記のPICウォッチウィンドウで

private void timer2_Tick(object sender, EventArgs e) 
    { 
     foreach (TabPage page in tabControl1.TabPages) 
     { 
      Control control = page.Controls[0]; 
      if(!hyber.Form1.receiverflag)//bug line 
      { 
       tabControl1.TabPages.Remove(page); 

      } 
     } 
    } 

page.controls [0] - > [hyber.form1] - > receiverflag

その変数を取得する方法値。

ありがとうございます。

+0

あなたは変数receiverflagが正確にあなたのForm1クラス内で宣言されているかを示すことができますか? –

+0

パブリックstatic bool receiverflag;あなたは静的メンバーであることを明確に見ることができます –

答えて

1

あなたは、バグ行についてはっきりしていない、あるいは、あなたが必要とする正確な値を得ることができないと言っています。

変数は、それが静的であること、クラスにしていないインスタンスに属しているので、あなたが書くときpublic static boolの場合:

hyber.Form1.receiverflag 

あなたは関係なく、Form1の特定のインスタンスの変数の値を取っています1つのインスタンスを作成してTabPageに追加した場合、インスタンスを作成しなくてもその変数が常に存在する場合は、まったく問題はありません。

もしあなたが間違った/予期しない結果になった場合、最終的には別のスレッドや別のメソッドがその静的フィールドの値を変更したことになり、アプリケーションのどこにでも反映されます。

編集:それは静的ではなかった場合、あなたはおそらく、あなたがこのように求めているものを得ることができます:

var yourForm1 = (page.Controls[0] as hyber.Form1); 

if(yourForm1 != null && !yourForm1.receiverflag) 
{ 
    .... 
+0

obvisuouslyあなたは正しいので、私はすべてのタブページに別々のインスタンスを設定します。私はパスでアクセスする必要がありますpage.controls [0] - > [hyber.form1] - > receiverflagどのように行うか –

+0

すべてのタブページはhyber.Form1の個別のインスタンスであり、静的変数はそのタブページにのみ属しているため、別の静的変数は反映されません。 –

+0

クラスで宣言されているため、パスでアクセスする必要はありません。宣言でstaticキーワードを削除してから、パスでアクセスできます。 –

関連する問題