2016-08-28 4 views
-2

私はC#を初めて使用しており、Windowsフォームを使用しています。C#でフォームが非表示になるまで処理コードを一時停止するには?

私はform1form2を持って、私が表示され、以下のようform1からform2を隠す:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 


    Form2 frm2 = new Form2(); 
    private void button_showForm2_Click(object sender, EventArgs e) 
    { 


     frm2.Show(); 

     //I want to show the following message once form2 hides: 

     MessageBox.Show("Form2 is hidden. Continue processing next line of code"); 

    } 
} 

をForm2のでは:

private void button_HideForm2_Click(object sender, EventArgs e) 
    { 

     Hide(); 

    } 

私は上記のコードを実行し、form2を表示すると、form2が現れます同時にmessageBoxと入力してください。 ShowDialog()は、子フォームを閉じるまでプログラムフローを保持しているので、Show()メソッドを使用すると、プログラムフローを保持せずに次のコード行を実行し続けるためです。私が何をしたいか

は(私がShowDialog()を使用したくない)です:私はform2を表示したいとあなたがそれを使用して終了し、それを隠すとき、私はときform2皮革(form1に)上記のメッセージを表示したいです。

どうすればいいですか?大いに感謝する。

+0

は、なぜあなたは 'にShowDialog()'を使用したくありませんか?あなたのシナリオに合わせて、おそらく最も簡単な解決策です。 –

+0

@ Martin Parkin。知っている。なぜなら私はForm2にMs MapPointを持っており、ShowDialog()を使うとmappointが失敗し、代わりにshow()を使わなければならないからです。 – Kate

+1

あなたは非常にバグの多いコードを書いていますが、試行錯誤してWinformsのプログラミングを実際に学ぶことはできません。入門書や*本当に良いチュートリアルを必ず読んでください。そのような本は確かにFormClosingイベントと、あまりにも多くのウィンドウでUIを作成しないようにする方法について教えてくれるでしょう。 –

答えて

0

フォームのVisibleChangedイベントをフックすると、フォームの可視性が変更されたときにコードが実行されます。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    Form2 frm2 = new Form2(); 
    private void button_showForm2_Click(object sender, EventArgs e) 
    { 
     frm2.VisibleChanged += new EventHandler(this.FormVisibilityChanged); 
     frm2.Show(); 
    } 

    private void FormVisibilityChanged(object sender, EventArgs e) 
    { 
     frm2.VisibleChanged -= new EventHandler(this.FormVisibilityChanged); 
     MessageBox.Show("Form2 is hidden. Continue processing next line of code"); 
    } 
} 
+0

私はbutton_showForm2_Clickの中にform2インスタンスを配置したくありません。私たちはそれを諦めることができますか?ありがとうございました – Kate

+0

frm2インスタンスの作成は、イラストレーションのためにイベントハンドラのフックアップの隣に配置されました。私は、イベントハンドラの明示的なアンフックを表示するようにコードを調整しました。 – PhillipH

1

私は

Form1のこのような方法でそれを実装します:

private void button_showForm2_Click(object sender, EventArgs e) 
{ 
    this.frm2 = new Form2(this); 
    this.frm2.Show(); 
} 

public void ShowMessage() 
{ 
    MessageBox.Show("Form2 is hidden. Continue processing next line of code"); 
} 

のForm2を:

public Form1 _Form1 { get; private set; } 
public Form2(Form1 _Form1) { this._Form1 = _Form1; } 

private void button_HideForm2_Click(object sender, EventArgs e) 
{ 
    Hide(); 
    this._Form1.ShowMessage(); 
} 
関連する問題