处理单键按压,多次

时间:2013-09-23 18:27:08

标签: vb.net keypress

在有人说以前曾经问过这个问题之前,我今天花了2个小时在谷歌尝试不同的措辞,希望能找到答案,而我所寻找的并不是什么。我发现的大部分内容都是使用像“CTRL + A”这样的键组合处理的,而这不是我想要的。

我的任务是创建一个看起来和弹钢琴的应用程序。到目前为止,我已将其设置为当您单击按钮(钢琴键)时,它会播放该特定频率(使用“Kernel32”库中的Beep函数?)

现在,我想要做的是按下A,D和G等键,同时弹奏和弦,这将转换为音符C,E和G。

我尝试做的是将所有内容放在KeyPress子下。

Sub frmForm1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles Me.KeyPress
        If Keys.A Then
            C_KeyPress()
        End If

        If Keys.S Then
            D_KeyPress()
        End If
    End Sub

但是当我按下A(或本例中的S键)时,它会执行两个If语句,即使我只按了A键。我不知道如何制作它以便它只播放我指定该键的特定音符。

(我不确定这是否需要进入另一个问题,但是,我如何一次处理3< =键,这样可以创建一个和弦?)

2 个答案:

答案 0 :(得分:1)

您正在测试Keys.<something>值,而不是将其与实际的按键数据进行比较。 KeyPress只会按下字符,但你可以用它做一些逻辑。例如:

If Char.ToLower(e.KeyChar) = Char.ToLower(ChrW(Keys.A)) Then
    C_KeyPress()
End If

答案 1 :(得分:0)

你可以

  1. 将所有键标记为向上

  2. 使用按键事件将每个键标记为“向下”,因为它已经关闭

  3. 使用密钥甚至将每个密钥重新标记为'up',因为它上升

  4. 有一个定时器循环,在每个刻度中根据当时标记为“向下”的键决定播放哪个声音