2013-10-10 63 views
0

由於某些原因,我試圖在按下Esc鍵時讓表單關閉。此表單也有一個退出按鈕以及當我把代碼放在退出按鈕事件處理程序,它不起作用,所以我採取了一個單獨的事件處理程序來保存它,它仍然沒有工作。C#使用Esc鍵關閉表單時遇到的問題

這是我有:

private void buttonExit_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
} 

private void FormName_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Escape) 
     this.Close(); 
} 

回答

3

您必須首先啓用您窗口窗體的KeyPreview。轉到表單屬性並將KeyPreview設置爲true。你的代碼應該可以工作。

3

只需設置形式的Cancel按鈕buttonExit。這是Form的財產。然後你可以擺脫所有的代碼。

+0

這是在您的方案中執行此操作的最佳方式。要了解爲什麼'KeyDown'事件解決方案無效,請參閱[KeyPreview](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.form.keypreview.aspx)。 – Sinatr

+0

@Sinatr,當然是'KeyPreview'需要被利用。我只是說有一個更可靠的方法來完成同樣的工作;無論如何不需要重新發明輪子。 –

0

您的代碼是正確的。 也許您沒有將窗體的keydown事件映射到窗體設計上的事件處理函數方法。

0

我想你會發現這個問題與表單上的內容有關係,因爲這個控件將是接收按鍵事件而不是表單的對象。

但是如果你設置了使用 Form.CancelButton Property

那麼這個硬線本身進入ESC鍵自動

+0

作爲AccessDienied在他的回答中說,你想保持你的處理程序的方式是它的KeyPreview命令將指示窗體監視被按下的鍵在哪個over控制有焦點 – MikeT

0

你可以試試你的形式的KeyPreview屬性設置爲:否則你的表格當鍵盤專注於表單中的控件時,將不會 執行KeyDown事件。

您可以修改buttonExit按鈕以及:設置其屬性的DialogResult以執行上逃生點擊按下取消