我想做这个。有 4 个按钮,就像我的表单中的箭头键。当我按下左边的按钮时,我想做真正的左箭头键做的事情。就像我想要所有 4 个按钮一样。我搜索并得到了关于 KeyEven 功能的信息,我正在自学。任何帮助将不胜感激。
谢谢。
我想做这个。有 4 个按钮,就像我的表单中的箭头键。当我按下左边的按钮时,我想做真正的左箭头键做的事情。就像我想要所有 4 个按钮一样。我搜索并得到了关于 KeyEven 功能的信息,我正在自学。任何帮助将不胜感激。
谢谢。
来自 MSDN 文章:
某些按键(例如 TAB、RETURN、ESC 和箭头键)通常会被某些控件忽略,因为它们不被视为输入按键。例如,默认情况下,Button 控件会忽略箭头键。按箭头键通常会使焦点移动到上一个或下一个控件。箭头键被视为导航键,按下这些键通常不会引发 Button 的 KeyDown 事件。但是,按 Button 的箭头键确实会引发 PreviewKeyDown 事件。通过处理 Button 的 PreviewKeyDown 事件并将 IsInputKey 属性设置为 true,您可以在按下箭头键时引发 KeyDown 事件。但是,如果您处理箭头键,焦点将不再移动到上一个或下一个控件。
我引用了我在那里找到的代码。我没有测试过
public Form1()
{
InitializeComponent();
// Form that has a button on it
button1.PreviewKeyDown +=new PreviewKeyDownEventHandler(button1_PreviewKeyDown);
button1.KeyDown += new KeyEventHandler(button1_KeyDown);
button1.ContextMenuStrip = new ContextMenuStrip();
// Add items to ContextMenuStrip
button1.ContextMenuStrip.Items.Add("One");
button1.ContextMenuStrip.Items.Add("Two");
button1.ContextMenuStrip.Items.Add("Three");
}
// By default, KeyDown does not fire for the ARROW keys
void button1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Down:
case Keys.Up:
if (button1.ContextMenuStrip != null)
{
button1.ContextMenuStrip.Show(button1,
new Point(0, button1.Height), ToolStripDropDownDirection.BelowRight);
}
break;
}
}
// PreviewKeyDown is where you preview the key.
// Do not put any logic here, instead use the
// KeyDown event after setting IsInputKey to true.
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Down:
case Keys.Up:
e.IsInputKey = true;
break;
}
}
这是链接http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx
希望这对你有帮助,祝你好运。