2012-01-09 5 views
4

私はフォームにusercontrolを追加したアプリケーションを持っています。私は、ユーザーコントロールのコンストラクタでthis.parentFormをチェックすると はそれがparentFormリファレンスはどのようにnullですか?

私のユーザーコントロールのコードを使用すると、必要はありません実際にこの行を追加した何をしたため

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

答えて

7

コントロールが作成されているときは、まだフォームに追加されていないので、親フォームはnullになります。

普段としてそれを書きたい場合でも:今、あなたのコンストラクタは最初ラインで実行されている

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

、しかし:

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

あなたはと考えるべきですformの最初の言及は、の第2の行にあります。どうすればそのコントロールがどのように可視性を持つことができますか?

代わりに、代わりにParentChangedイベントを処理し、適切な処置を講ずる必要があります。 (Windowsフォームを使用していない場合は申し訳ありませんが、他のUIフレームワークに相当するものがあると思いますが、次回は質問内で使用していることを説明できる場合に便利です)。

+0

それでは、ReSizeのようなuserControlで親イベントを処理できるように、どうすればparnetFormの参照を取得できますか? –

+1

@Nilesh私が言ったように、ParentChangedイベントでやってください。 –

0

のようなものですnull参照を与え、この行を削除

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

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

     } 
+0

これはダミーコードです、私は条件の場合、他のコードを内部に渡す必要があります。 –

関連する問題