首页 文章

如何在按钮处于焦点时阻止enter键触发单击事件

提问于
浏览
1

我正在尝试制作一个程序,它可以接受基于按钮的输入以及基于键盘的输入,然后输出到文本框 . 但是,我想使用Enter键来触发函数输出到文本框 . 但是由于表单上有按钮 . 按下回车键时,它们将像鼠标单击事件一样触发 . 我需要找到一种方法来让enter键只触发我想要的事件而不是触发按钮 . 或者我需要找到一种方法,使按钮永远不会有焦点,并且焦点总是在表单本身上,同时仍然可以点击按钮 . 有帮助吗?

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

2 回答

  • 0

    理论上,将表单的 KeyPreview 属性设置为 True 应该这样做 . 然后处理 KeyDown 事件,并确保在按Enter键时将 e.Handled 设置为 True (或e . SuppressKeyPress,取决于您正在使用的控件的实现) .

    我刚刚在一个示例项目中尝试过这种方法,但由于某种原因它不能用于按钮 . 您可能需要在表单级别使用 WndProc ,这总是100%有效 .

  • 1

    如果你想直接进入关键事件的核心,甚至拦截箭头和其他改变焦点的键,你需要这样的东西:

    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
    

相关问题