2012-01-09 15 views
4

我有一個應用程序,我在窗體上添加了一個usercontrol。 當我在用戶控件構造檢查this.parentForm它給出了一個空引用如何parentForm引用爲空?

我的用戶的代碼是這樣

public UserControl1() 
     { 
      InitializeComponent(); 
      if (this.ParentForm != null)//ParentReference is null 
      { 
       MessageBox.Show("Hi");//Does Not get Called 
      } 
     } 

回答

7

創建控件時,它不會被添加到表單中 - 所以當然父表單將爲空。

即使你通常寫爲:

// Where form might be "this" 
form.Controls.Add(new UserControl1()); 

你應該把它看作:

UserControl1 tmp = new UserControl1(); 
form.Controls.Add(tmp); 

現在你的構造是在第一線被執行,但第一次提到form是在第二行行...所以如何控制它有任何可見性?

您應該改爲處理ParentChanged事件,然後採取適當的措施。 (道歉,如果你不使用Windows窗體 - 我敢肯定,其他UI框架相當於;下一次,如果你可以說明你在問題中使用什麼是有用的)。

+0

那麼我如何才能得到parnetForm的引用,以便我可以像ReSize那樣在userControl上處理一些父事件? – 2012-01-09 06:32:23

+1

@Nilesh正如我所說,在ParentChanged事件中執行它。 – 2012-01-09 06:38:55

0

爲你添加什麼了這一行不需要實際上,刪除此行

if (this.ParentForm != null)//ParentReference is null 

public UserControl1() 
     { 
      InitializeComponent();    
      MessageBox.Show("Hi");//Does Not get Called 

     } 
+0

這是虛擬代碼,如果條件不符,我需要討論其他代碼。 – 2012-01-09 06:26:37