在有人说以前曾经问过这个问题之前,我今天花了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< =键,这样可以创建一个和弦?)
答案 0 :(得分:1)
您正在测试Keys.<something>
值,而不是将其与实际的按键数据进行比较。 KeyPress
只会按下字符,但你可以用它做一些逻辑。例如:
If Char.ToLower(e.KeyChar) = Char.ToLower(ChrW(Keys.A)) Then
C_KeyPress()
End If
答案 1 :(得分:0)
你可以
将所有键标记为向上
使用按键事件将每个键标记为“向下”,因为它已经关闭
使用密钥甚至将每个密钥重新标记为'up',因为它上升
有一个定时器循环,在每个刻度中根据当时标记为“向下”的键决定播放哪个声音