2011-09-17 71 views
1

在這裏我面臨着問題,我將表單動態添加到標籤頁。 我必須從該表單中獲取一個靜態變量。訪問變量在表格的標籤頁內

我使用的代碼,但我不能得到確切的價值,我需要。

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); 

      } 
     } 
    } 

在上述PIC監視窗口

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

如何獲得該變量值。

在此先感謝。

+0

可以顯示變量receiverflag是如何準確地宣告你的Form1類裏面? –

+0

public static bool receiverflag;在圖片上,你可以清楚地看到它的靜態成員 –

回答

1

你不清楚錯誤行或說不能得到你需要的確切值。

如果變量是一個public static bool它屬於類,而不是到該實例,是靜態的,所以當你寫:

hyber.Form1.receiverflag 

你正在服用的變量的值,而不管Form1上你的具體實例正在處理,如果您創建了一個實例並添加到TabPage,則根本無關緊要,即使您未創建任何實例,該變量也始終存在。

如果您發現錯誤/意外結果可能最終會導致另一個線程或其他方法更改了該靜態字段的值,並且這反映了您的應用程序中的任何地方。

編輯:,如果它不是靜態的,你很可能得到你問這樣的內容:

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

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

明顯地你對,所以只有我設置單獨的實例到每個tabpage,我需要通過我提到的路徑訪問page.controls [0] - > [hyber.form1] - > receiverflag如何做到這一點 –

+0

所以每個標籤頁都是hyber.Form1和靜態變量的單獨實例,只屬於該標籤頁,所以另一個靜態變量不會反映出來。 –

+0

你不需要通過路徑訪問,因爲它是爲類聲明的,在聲明中刪除靜態關鍵字,然後你可以通過路徑訪問。 –