0

在有人说之前有人问过这个问题之前,我今天花了整整 2 个小时在 Google 中尝试不同的措辞,希望能找到答案,但没有什么是我想要的。我发现的大部分内容都是使用诸如“CTRL + A”之类的组合键来处理的,这不是我想要在这里做的。

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

现在,我想做的是按下 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 个 <= 键,以便创建一个和弦?)

4

2 回答 2

1

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

If Char.ToLower(e.KeyChar) = Char.ToLower(ChrW(Keys.A)) Then
    C_KeyPress()
End If
于 2013-09-23T18:34:23.887 回答
0

你可以

  1. 将所有键标记为已启动

  2. 使用按键按下事件将每个按键标记为“按下”

  3. 甚至使用键向上将每个键重新标记为“向上”

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

于 2013-09-24T03:48:37.103 回答