2012-03-12 2 views
1

私はOneTwoという2つのフォームを持っています。タイトルテキストはそれぞれの名前と同じです。それが含まれているのモーダル対モーダルネスダイアログ

One

Two l_objTwo = new Two(); 
l_objTwo.Show();    
MessageBox.Show("Two Closed"); 

それはTwoを開き、「2つの閉じた」というメッセージがポップアップ表示されることをした後、ボタンやクリックイベントをしています。

私のscenerioはTwo iがOneの制御を必要とすると同時に、私はTwoが閉じてしまった後にいくつかの機能を実行する必要がありますすなわちModeless方法で開かれるべきであること、です。今のところ私は、のような細かい作業

[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)] 
public static extern IntPtr FindWindow(String sClassName, String sAppName); 

Two l_objTwo = new Two(); 
l_objTwo.Show(); 
IntPtr l_objHandle = FindWindow(null, "Two"); 
while ((int)l_objHandle > 0) 
{ 
    l_objHandle = FindWindow(null, "Two"); 
    Application.DoEvents(); 
} 
MessageBox.Show("Two Closed"); 

そのを使用していますが、これは、これを達成するための唯一の方法ですか?

+0

@svick&@ Jodrell:ありがとうございました。 –

答えて

1

いいえ、それだけではありません。 最初のフォームでは、FormClosedまたはFormClosingの公開イベントのいずれかにハンドラをアタッチします。

2番目のフォームが閉じるとイベントが発生し、1番目のフォームは2番目のフォームが閉じていることを認識します。

ただ、このスニペットを使用します。

private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 f = new Form2(); 
     f.FormClosed += new FormClosedEventHandler(FormClosedHandler); 
     f.Show(); 
    } 
    void FormClosedHandler(object sender, FormClosedEventArgs e) 
    { 
     MessageBox.Show("Second form has closed."); 
    } 
0

これは、すべての周りに乱雑に見えます。あなたがここで何を達成したいのか分かりません。 Oneのイベントハンドラでフォーム2を開き、2つのonclose-eventをMessageBoxにフックします。

1

イベントハンドラを使用し

var two = new Two(); 
two.Closed += OnTwoClosed; 
two.Show(); 

private void OnTwoClosed(object sender, EventArgs e) 
{ 
    MessageBox.Show("Two Closed") 
} 

はリサイズFormにこのコードをテストしていませんが、校長は同じであり、そのすべての固有の落とし穴と、WindowsのAPIを使用するよりも簡単に。

もう1つのメリットは、ウィンドウのタイトルを好きなものにすることができることです。

After checking hereClosedFormClosedは有効なイベントです。

関連する問題