次のようにコンボボックスに入力します。
foreach (Keys key in Enum.GetValues(typeof(Keys)))
{
comboKey.Items.Add(key);
}
後で、ユーザーは MIDI ノートとキーを選択できます。選択したノートが演奏されると、キーがシミュレートされます。で試してみましたSendKeys.Wait
public void NoteOn(NoteOnMessage msg) //Is fired when a MIDI note us catched
{
AppendTextBox(msg.Note.ToString());
if (chkActive.Checked == true)
{
if (comboKey != null && comboNote != null)
{
Note selectedNote = Note.A0;
this.Invoke((MethodInvoker)delegate()
{
selectedNote = (Note)comboNote.SelectedItem;
});
if (msg.Note == selectedNote)
{
Keys selectedKey = Keys.A; //this is just so I can use the variable
this.Invoke((MethodInvoker)delegate()
{
selectedKey = (Keys)comboKey.SelectedItem;
});
SendKeys.SendWait(selectedKey.ToString());
}
}
}
}
しかし、たとえば、コンボボックスで「スペース」キーを選択して必要な音符を演奏すると、スペースが作成されず、単に「スペース」と書かれます。そして、これはおそらく私が書いたからだとわかってselectedKey.ToString()
いますが、正しいアプローチは何ですか?