2013-12-17 81 views
1

我想製作一個程序,可以接受基於按鈕的輸入以及基於鍵盤的輸入,然後輸出到文本框。不過,我想用Enter鍵來觸發函數輸出到文本框。但是,由於表單上有按鈕。當按下回車鍵時,它們將像鼠標點擊事件一樣被觸發。我需要找到一種方法,讓輸入鍵只觸發我想要的事件,而不是觸發按鈕。或者我需要找到一種方法來讓按鈕永遠不會焦點,並且始終將焦點放在窗體上,同時仍然可以點擊按鈕。任何幫助?如何防止回車鍵觸發點擊事件時,按鈕對焦

 If e.KeyCode = Keys.Enter Then 
     SecondNum = Val(TB_Output.Text) 
     ResultEquals() 
     TB_Output.Text = Result 
    End If 
+0

檢查出來的'KeyPreview'屬性在System.Windows.Form類中。 –

+1

Space鍵用焦點操作按鈕。回車鍵完全不同,它操作您選擇的默認「接受」鍵。通常是確定按鈕。如果你已經對自己的用戶界面感到困惑,那麼你的用戶也不會有太大的機會,也許改變它並不是一個好主意...... –

+0

@HansPassant:我測試了這個,好像都進入了空間在按鈕上同樣操作,即按下按鈕。以不同的方式嘗試,沒有區別。那麼你指的是哪種設置,它會按照你上面描述的方式工作? – Neolisk

回答

1

從理論上講,形式的KeyPreview屬性設置爲True應該這樣做。然後處理KeyDown事件,並確保按Enter鍵(或SuppressKeyPress,取決於您正在使用的控件的實施)將e.Handled設置爲True

但是,我剛剛在一個示例項目中嘗試了這種方法,但由於某種原因它沒有使用按鈕。您可能需要在表單級別上使用WndProc,這總是100%。

0

如果你想要去的權利的關鍵事件的心臟,並攔截甚至箭等重點變化的鑰匙,你需要這樣的事:

Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean 
     Select Case keyData 
      Case Keys.Enter 
       'your logic here 
       Return True 'this surpresses any default action 
     End Select 
     Return MyBase.ProcessDialogKey(keyData) 'this allows the default action to be processed for any cases you haven't explicitly intercepted 

    End Function 
相關問題