【问题标题】:On key release handler键释放处理程序
【发布时间】:2014-04-06 14:23:39
【问题描述】:

所以,我要做的是在按下按钮时运行一段代码(我暂时使用右箭头键),并继续循环运行它,直到该键发布。

所以,我当前的代码看起来是这样的(我已经简化了它,因为它使用的是 SerialPorts,而且代码不容易理解):

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

    Select Case e.KeyCode

        Case Keys.Right

            Do Until (CODE LOOKING FOR RIGHT-ARROW KEY RELEASE)
                SerialPort1.Write("right")
            Loop

            e.Handled = True
            SerialPort1.Close()
End Sub

最终,我要做的是通过串口功能控制和arduino。我已经把它连接到一辆便宜的遥控车上(我通常有几个 arduino 项目在路上),并且有代码可以让我通过 IDE 本身的箭头键来控制它。

但是,我的 VB.NET 知识有限(我才学了几年),所以我在 Google 的帮助下有点挣扎,在尝试找出如何保持串口打开(由于我的代码中的逻辑错误,它一直关闭)。

目标是,一旦我可以在 VB.NET 中通过箭头键控制它,我就可以设置一个更高级的程序,允许预先编程路线(例如,我可以尝试“教”汽车组指令,以便我可以让它自动跟随电路,并将各种预编程的路线加载到其中)。我还计划一个屏幕上的 gui 来显示按下了什么按钮,以及我想到的任何其他内容。

另外,鉴于这是一个原型,我打算最终将 arduino 和 VB 程序连接到我的爱好级 rc,看看我是否可以得到带有预编程指令的计算机程序,以击败我的赛道.

好吧,在那篇小论文之后,我想只是提前致谢,我项目其他领域的任何建议也很感激 =)

【问题讨论】:

标签: vb.net keypress keyup eventhandler


【解决方案1】:

为什么要把这复杂化。看起来你想只要按键按下就发送一些东西,然后在释放时关闭端口。

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.Right AndAlso keydelay >= 1 Then
        Debug.WriteLine("DWN") 'SerialPort1.Write("right")
        e.Handled = True
    ElseIf e.KeyCode = Keys.Right Then
        keydelay += 1
    End If
End Sub

Dim keydelay As Integer = 0

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
    If e.KeyCode = Keys.Right Then
        keydelay = 0
        Debug.WriteLine("UP") 'SerialPort1.Close()
    End If
End Sub

【讨论】:

  • 这似乎在我的测试中有效(直到稍后我才能用我的 arduino 实际测试它),会建议它是否成功。
  • 我遇到了这样一个问题,即在第一次通过串行端口发送内容与其余时间之间存在暂停。例如,我按下向上箭头键,它会将汽车向前移动一点,暂停,然后再次平稳地向前移动。
  • @Phynix 如果它运行良好,那么您应该将其标记为答案:meta.stackexchange.com/questions/5234/…
  • 啊,我一直按箭头,它说声望不够。明白了:)
猜你喜欢
  • 1970-01-01
  • 2012-02-19
  • 2013-01-13
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多