【问题标题】:Catch if user presses enter key in textbox如果用户在文本框中按下回车键,则捕获
【发布时间】:2017-03-30 13:22:08
【问题描述】:

如果用户按下回车键,我正在尝试捕捉Event。如果按照MSDN documentation pages 上的这些说明进行操作。

这是我的Event 代码Textbox

Private Sub tbOccurrenceElevation_KeyDown(sender As Object, e As KeyEventArgs) Handles tbOccurrenceElevation.KeyDown

    ' Check if the enter key is pressed
    If e.KeyCode = Keys.Return Then
        OccurrenceElevation_Changed()
    End If

End Sub

我的问题是:当我按下键盘上的任何按钮时,Event 被触发,但是当我按下回车键(返回)时没有任何反应?

我尝试将Textbox 属性更改为AcceptsReturn = True,但没有成功。

额外信息:文本框位于 UserControl 而非表单控件上。

【问题讨论】:

  • 我做了一个快速测试。如果文本框在用户控件中并且在包含该控件AcceptButton 的表单中已设置,则在按下回车键时它不会触发事件
  • Euhmm 用户控件已添加到 Autodesk Inventor 的可停靠窗口对象中。那么我猜这会导致问题吗?
  • 有可能。我猜父窗口正在捕获 enter press 事件,所以它不会由您控制。
  • 尝试使用 RichTextBox 我遇到了类似的问题,我使用 RichTextBox 而不是简单的文本框。简单的文本框无法在 UserControl 中捕获键盘事件,但 RichTextBox 可以。

标签: vb.net events keydown


【解决方案1】:

如果其他原因阻止文本框接收回车键,您可以尝试覆盖 UserControlProcessCmdKey

它可能会起作用,但这完全取决于父级拦截消息在事件链中的哪个位置。

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean
    If keyData = Keys.Return AndAlso tbOccurrenceElevation.Focused = True Then
        'Do your stuff here.
        Return True 'We've handled the key press.
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function

【讨论】:

  • 此功能不会在任何按键被按下时触发。 :sadface: 我也在 Autodesk 要求回复,但没有回复(但..)。感谢您的帮助!
  • @Mech_Engineer :太糟糕了。我希望有人能在那边帮助你。
【解决方案2】:

试试这个:

Private Sub tbOccurrenceElevation_KeyDown(sender As Object, e As KeyEventArgs) Handles tbOccurrenceElevation.KeyDown

    ' Check if the enter key is pressed
    If e.KeyCode = Keys.Enter or e.KeyCode = Keys.Return Then
        OccurrenceElevation_Changed()
    End If

End Sub

您必须记住,大多数键盘都有 Enter 和 Return。这些代码是不同的,所以你必须同时包含它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2011-09-25
    • 1970-01-01
    • 2011-02-13
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多