2011-05-12 60 views
5

如何關閉我的C#WinForms程序,同時存在一些控件,如樹視圖,按鈕和其他東西存在於其中,並且它們具有焦點,並且可能它們具有相同鍵盤快捷鍵?如何在控件擁有焦點時用鍵盤關閉WinForm

例如在我的樹視圖中,如果按下ALT + ESC鍵,節點將被刪除。但我希望能夠通過按下ESC鍵來調用'this.Close()'方法,而不管任何控件是否具有焦點。

謝謝。

回答

2

也許你可以通過覆蓋在Form

protected override bool ProcessDialogKey(Keys keyData) 
{ 
    if (keyData == Keys.Escape) 
    { 
     this.Close(); 
     return true; 
    } 
    else 
     return base.ProcessDialogKey(keyData); 
} 
4

將您的表格的屬性設爲KeyPreview屬性爲true。這允許您在控制處理程序之前處理表單處理程序中的鍵盤消息,即使控件具有焦點。

1

您需要將表單的KeyPreview屬性設置爲true。這將使表單在傳遞到其上的控件之前捕獲按鍵,這使得您可以攔截它們並在需要時傳遞它們,或者執行其他操作,如使用組合鍵關閉表單。

0

設置窗體爲true的KeyPreview財產試試這個(它將把keyborad事件的控件之前形成。),並在編寫代碼KeyXXX事件,並檢查ESC鍵和呼叫this.close()

0

它已經內置到Windows中。 Alt-F4將關閉前臺應用程序。你不需要做任何特別的事情來處理這個問題。如果你只想關閉一個窗口,而不是整個應用程序,比如在一個MDI風格的界面中,那麼Ctrl-F4就可以實現。

+0

這是真的,但按ESC比alt f4組合更容易,特別是當用戶必須做很多! – 2011-05-12 23:56:27

+0

我會反駁。您可以構建一個特定於您的應用程序的「更簡單」替代方案,但向您的用戶教授標準密鑰將幫助他們在所有應用程序中使用它們。如果標準已經存在,儘量不要發明替代品。 – Mel 2011-05-13 11:24:04