2015-09-07 99 views
0

我有一個C#Windows窗體應用程序,它有一個主窗體,在其構造函數中打開兩個其他窗體。我會稱他們爲側面板。Form.GotFocus禁用關閉按鈕

主窗體處理了GotFocus事件,它爲兩個側面板窗體調用Form.BringToFront()。

當啓用此功能(即處理GotFocus)時,主窗體的關閉按鈕停止工作。

如何檢查事件處理程序中是否按下了關閉按鈕?

public Canvas() 
    { 
     InitializeComponent(); 

     this.GotFocus += new EventHandler(WindowGotFocus); 

     tool.Show(); 
     pp.Show(); 
    } 

    public void WindowGotFocus(object sender, EventArgs e) 
    { 
     tool.BringToFront(); 
     pp.BringToFront(); 
    } 

當我按下關閉按鈕的主要形式,它獲得焦點,該WindowGotFocus方法被調用,應用程序不會關閉。如果我評論'this.GotFocus + = new EventHandler(WindowGotFocus);'在構造函數中,它的工作原理。

我需要這個功能,這樣如果使用從另一個應用程序切換回應用程序,則會再次顯示側面板。

+0

你需要分享你的代碼,因爲發生的事情很可能是由代碼引起的。你能解釋一下「停止工作」是什麼意思嗎?你的意思是說你有沒有被調用的代碼,或者你不能點擊它,或者當你單擊它時表單沒有關閉? –

+0

我已經用代碼更新了這個問題,以及需求和行爲的細節。 – PhoenixDev

回答

1

那麼,它當然是行不通的。您導致表單失去焦點,這意味着就窗口而言,點擊從未發生過。

來處理,這是通過簡單地使主窗口的工具窗口孩子的正確方法:

var parent = new Form(); 
var child = new Form(); 

parent.AddOwnedForm(child); 

parent.Show(); 
child.Show(); 

這會自動處理你所期望的行爲 - 畢竟,你期望的行爲,因爲其他應用程序做同樣的事情 :)除了確保子窗口在主窗口顯示時顯示外,還會在父窗口關閉時關閉所有子窗口等等。