Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何注册一组按键来播放声音_C#_Winforms - Fatal编程技术网

C# 如何注册一组按键来播放声音

C# 如何注册一组按键来播放声音,c#,winforms,C#,Winforms,我正在制作一个音板应用程序(windows窗体),我想在上面播放选定的声音,例如,按下LeftAlt+a键 尝试: 我也尝试过使用KeyEventArgs,但它似乎对我不起作用 帮助很好:)在控件上,您可以对KeyUp或KeyDown事件做出反应: private void Control_Key/*UpOrDown*/(object sender, KeyEventArgs e) { if ( e.Modifiers == Keys.Alt && e.KeyCode ==

我正在制作一个音板应用程序(windows窗体),我想在上面播放选定的声音,例如,按下LeftAlt+a键 尝试:

我也尝试过使用
KeyEventArgs
,但它似乎对我不起作用


帮助很好:)

在控件上,您可以对KeyUp或KeyDown事件做出反应:

private void Control_Key/*UpOrDown*/(object sender, KeyEventArgs e)
{
  if ( e.Modifiers == Keys.Alt && e.KeyCode == Keys.A )
  {
    // ...
  }
}
在表格(包括任何控件)上:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  if ( keyData == (Keys.Alt | Keys.A) )
  {
    // ...
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}

你说的是组合框吗?或者你想在什么样的控制下行动?表单本身和任何控件?我想执行以下命令:System.Media.SoundPlayer player=new System.Media.SoundPlayer();player.SoundLocation=openfiledialog1.filename;player.Load();player.Play();把这个放在按键事件上不是更合乎逻辑吗?像这样,它只会在您释放组合时触发。@nyrguds不,使用KeyDown是一种UX反模式,因为它太残酷了:它阻止用户改变主意。这就像在控件上使用鼠标向下键来触发操作。。。你点击一个按钮,你改变主意,移动鼠标并释放按钮外的按钮,但它会启动动作。。。该死使用鼠标单击鼠标右键。“向下”是指执行其他操作,如准备更改用户界面(如光标、颜色或其他非操作本身的操作)。@OlivierRogier如果在文件系统中按delete键,则在开始按住键时,而不是松开键时,您将看到“确定吗?”框。同样,当你在任何地方粘贴某物时,它会在你同时按下Ctrl和V键的时候发生,而不是在你释放它的时候。所有快捷方式系统都是这样工作的。这是用户习惯的。在浏览器中按住[Ctrl],然后按住“O”。你会看到的。即使你不释放密码,它也会响应。这不是一个问题“反模式”。这是常态。单击按钮的方式与按键的方式不同。请注意,问题是关于音板应用程序的。这就像一架钢琴,只在你释放钥匙的那一刻播放声音,而不是在你按下钥匙的那一刻。更不用说,与点击按钮不同,无论如何都无法“取消”操作;您按下的任何键最终都会被释放并触发
键控
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  if ( keyData == (Keys.Alt | Keys.A) )
  {
    // ...
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}