2012-04-01 9 views
3

Windowsフォームが初めてで、すべてのユーザーコントロールを処理する際に問題が発生しました。私は3つのユーザーコントロールを持っています、そして、私は2番目の画面(ユーザーコントロール2)に私を連れていますが、私は2番目の画面でキャンセルをクリックすると、最初の画面に戻ってきますもう一度ユーザーコントロールを押してください)、問題を今すぐ "Accept"をクリックすると、ウェルカムユーザーコントロールはnullとエラーを返します。初期ユーザーコントロールに戻った後にnullを返すフォーム

private void Viewer_Load(オブジェクト送信者、EventArgs e) { formPanel.Controls.Clear(); formPanel.Controls.Add(wel); }

private void SwapControls(object sender, EventArgs e) 
    { 
     if (formPanel.Controls.Contains(wel)) 
     { 
      formPanel.Controls.Remove(wel); 
      formPanel.Controls.Add(p); 
     } 
     else if (formPanel.Controls.Contains(pin) && IsAuthenticated) 
     { 
      formPanel.Controls.Remove(p); 
      formPanel.Controls.Add(m); 
     } 
     else if(formPanel.Controls.Contains(pin) && !Global.IsAuthenticated) 
     { 
      formPanel.Controls.Remove(p); 
      formPanel.Controls.Add(wel); 
     } 

は、だから、最初の頃は、そこ私はをクリックし、「同意する」を歓迎ユーザーコントロールをロードし、それがときから、ユーザーコントロールと負荷まで二番目の「ピンコントロールを入力します」をクリア「キャンセル」をクリックします。そのユーザーコントロールを削除してもう一度ロードします。ようこそ。しかし、今、私は同意する]をクリックしたときに、私は歓迎ユーザーコントロールに

再び
this.AddControl(this, new EventArgs()); 

をこの行のヌルを取得し、私は、Windowsフォームに新しいですし、私が学んでいる、任意の入力がはるかに高く評価されるだろう。

答えて

3

UserControlsUserControlsハンドラをFormから削除するときにハンドラを削除しないでください。UserControlsの使用を終了したら、ハンドラを削除してください。

このようなものを試してみてください。

private void SwapControls(object sender, EventArgs e) 
{ 
    if (formPanel.Controls.Contains(wel)) 
    { 
     formPanel.Controls.Remove(wel); 
     formPanel.Controls.Add(pin); 
    } 
    else if (formPanel.Controls.Contains(pin) && Global.Instance.IsAuthenticated) 
    { 
     formPanel.Controls.Remove(pin); 
     formPanel.Controls.Add(mmenu); 
    } 
    else 
    { 
     formPanel.Controls.Remove(pin); 
     formPanel.Controls.Add(wel); 
    } 
} 

/// <summary> 
/// Clean up any resources being used. 
/// </summary> 
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
protected override void Dispose(bool disposing) 
{ 
    wel.AddControl -= new EventHandler(SwapControls); 
    pin.AddControl -= new EventHandler(SwapControls); 
    pin.ReturnWelcome -= new EventHandler(SwapControls); 

    if (disposing && (components != null)) 
    { 
     components.Dispose(); 
    } 
    base.Dispose(disposing); 
} 
+0

私はハンドラを削除する必要があるときに私は理解しない唯一のものであり、働いていたことをありがとう...私はちょうどそこにそれらを残すことができます?。 – user710502

+0

UserControlsが常にインスタンス化されている場合は、フォームのDisposeメソッドでそれらを削除するだけです。 –

+0

私は残念ですが、どうすればユーザーコントロールを削除できますか?処分場で? – user710502

関連する問題