2012-03-12 61 views
1

我有兩種形式,即OneTwo,兩者的標題文本與它們的名稱相同。Modal與無模式對話框

One是有一個按鈕,然後單擊事件的包含,

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

它打開了Two和「兩關閉」的消息會被彈出後。

我之情況是,Two應在Modeless方式即我需要的One控制,並在同一時間,我需要Two得到關閉後執行某些功能被打開。截至目前我正在使用像,

[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:謝謝........... – 2012-03-12 11:21:14

回答

1

不,這不是唯一的方法。 你的第一種形式將附加的處理程序要麼FormClosedFormClosing第二種形式的公共事件。

當您的第二個表單關閉時,它將引發該事件,第一個表單將知道您的第二個表單已關閉。

只要使用這個片段:

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並將兩個onclose事件掛接到您的MessageBox。

1

使用的事件處理程序

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

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

沒有測試此代碼在一個WinForms Form但主要是相同的,並且比使用其所有的固有缺陷在Windows API更容易。

另一個好處是,窗口的標題可以是任何你喜歡的。

After checking here它看起來都是ClosedFormClosed是有效事件。