2010-07-23 48 views
1

我有一個窗體myForm,它的KeyPreview設置爲true。KeyPreview在控制之前沒有處理KeyUp事件

這個想法是,我想捕獲CTRL-Enter並激發表單的提交按鈕,無論哪個文本框(或其他控件)可能有焦點。

所以我成立了這個方法:

private void myForm_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.Enter) 
    { 
     btnCommit_Click(sender, new EventArgs()); 
    } 
} 

這不正是它說。問題是,輸入關鍵筆劃也在具有焦點的文本框中觸發,所以文本框現在在一個詞的中間或光標所在的位置有一個分行符。根據MSDN文檔:

當此屬性設置爲true時,表單將接收所有KeyPress,KeyDown和KeyUp事件。在表單的事件處理程序完成鍵擊處理之後,將鍵擊分配給具有焦點的控件。

這是不幸的,不是真的,我已經通過代碼確認了文本框確實顯示了新的換行符,然後myForm_KeyUp代碼被觸發。

我已嘗試將兩個

e.Handled = true; 

e.SuppressKeyPress = true; 

沒有效果,因爲文本框已經具備了斷行。

任何想法?我錯過了什麼嗎?

回答

1

所以這應該是一個沒有道理的。我輸入所有這些只是爲了意識到我應該一直處理KeyDown而不是KeyUp。顯然,KeyUp在TextBox的KeyDown之後觸發,即使它在TextBox的KeyUp之前觸發。

2

您應該重寫OnProcessCmdKey()。它運行得很早,確保沒有任何控制可以竊取按鍵。

相關問題