2013-12-17 82 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 
相关问题