有没有办法覆盖按键发送到哪个控件?

时间:2016-09-02 17:39:28

标签: vb.net controls keystroke

对于我的聊天应用的服务器版本,我在表单中有两个控件:Input TextBox来输入聊天,ClientList CheckedListBox我可以选择已连接的客户端以对其执行各种操作(例如静音,踢等)。

以下是与这些控件相关联的事件的Handlers

Private Sub Input_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Input.KeyDown

    If e.KeyCode = Keys.Escape Then

        e.SuppressKeyPress = True
    End If

    If e.KeyCode = Keys.Enter Then

        Send.PerformClick()

        e.SuppressKeyPress = True
    End If
End Sub

Private Sub ClientList_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ClientList.KeyPress

    If e.KeyChar <> " " Then

        Input.Select()

        SendKeys.Send(e.KeyChar)
    End If
End Sub

(请注意,Send是一个将输入发送到聊天的按钮)

虽然ClientList具有焦点:正如您在ClientList_KeyPress中看到的那样,我希望将与KeyPresses无关的任何ClientList发送到Input }。 (只需要空格键和箭头键来导航和选择ClientList

中的项目

虽然上面的代码可以正常工作,但我觉得这样做是一种不太优雅的方式。使用SendKeys不会委托KeyPress - 它只是简单地向应用程序发送另一个击键,感觉编码很差。如果稍微改变代码以使其更复杂并且运行异步,那么如果Input.Select因任何原因失败或ClientList最终再次聚焦,则可能会发送无限的击键。< / p>

所以我想要一个建议,在KeyStroke发送到焦点控件之前拦截Input.KeyPress或在ClientList_KeyPress触发SendKeys事件的建议(即委托)。< / p>

我无法从自己的研究中找到任何内容 - 使用<a href="/shop/" class="name-link">Cargo Pant</a> 的上述代码是我能找到的。

0 个答案:

没有答案