回答
沿东西线)
private void Form1_Load(object sender, EventArgs e)
{
SetFeatureToAllControls(this.Controls);
}
private void SetFeatureToAllControls(Control.ControlCollection cc)
{
if (cc != null)
{
foreach (Control control in cc)
{
control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
SetFeatureToAllControls(control.Controls);
}
}
}
void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
e.IsInputKey = true;
}
}
您应该设置KeyPreview
为true的形式。处理KeyDown/KeyUp/KeyPress
事件,并将事件处理程序中的e.Handled
设置为对于要忽略的键为true。
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control control in this.Controls)
{
control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
}
}
void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
e.IsInputKey = true;
}
}
这种做法似乎并不工作,没有e.Handled上 – andynormancx 2009-08-23 11:15:20
e.Handled存在PreviewKeyDownEventArgs但在方法为:private void Form1_KeyUp(对象发件人,发送KeyEventArgs E)的KeyDown等我有问题也采用这种方法。我会在干净的项目上尝试一下。 – 2009-08-23 11:20:54
是的,它存在于KeyDown事件中,但设置它没有帮助,导航已经发生在那个点上。 – andynormancx 2009-08-23 11:34:11
我已经结束了与下面的代码里面设置功能在表单中的每个控制:
(代码是基于一个从andynormancx
我试过这个问题,表单处理预览事件一次。它比其他选项生成的代码少。
只需将此方法添加到表单的PreviewKeyDown
事件中,并将KeyPreview
属性设置为true
即可。
private void form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
case Keys.Down:
case Keys.Left:
case Keys.Right:
e.IsInputKey = true;
break;
default:
break;
}
}
嗨carlos。我想用你的较短的版本,但是当我测试它时,它不会做它应该不幸的事情(当然,我确实记得设置'Form.KeyPreview = true')。只有当我在Form_Load中添加foreach()时,行为才发生变化。你测试过了吗? – spaceman 2016-02-13 06:00:45
- 1. c#使用tabcontrol禁用箭头导航
- 2. 如何在Ext JS中使用箭头键禁用Tabpanel导航?
- 3. 使用JavaScript的Tumblr箭头键导航
- 4. 如何禁用FlipView上的箭头?
- 5. here api如何禁用turn-to-turn导航箭头
- 6. 如何使用Flex 4.6 AS3中的箭头键导航屏幕?
- 7. WPF:如何在不禁用箭头键导航的情况下禁用标签导航?
- 8. iOS使用箭头键导航TableView
- 9. jQuery的箭头键导航
- 10. 在ListView中禁用键盘箭头导航
- 11. 如何在Python中使用箭头键导航菜单
- 12. 使用jquery键盘上的箭头键导航图像
- 13. 使用向上和向下箭头导航不起作用
- 14. 如何使用键盘箭头使ul HTML列表导航
- 15. VIM:禁用光标/箭头键,但仅限于导航
- 16. 如何使用箭头键禁用FF中的页面滚动
- 17. 如何使用箭头键导航熨斗选择器项目?
- 18. 使用缩略图库中的箭头键导航
- 19. 使用箭头键导航单元格中的定义值
- 20. 如何在C#/ WPF中的一行上使用箭头符号?
- 21. jqGrid - 使用上/下箭头键导航行?
- 22. 使用向上/向下箭头导航HTML表单
- 23. 如何更改Android上导航抽屉箭头的颜色?
- 24. 滑动导航箭头
- 25. jquery箭头键导航
- 26. 响应箭头Breadcrumb导航
- 27. ListBox + WrapPanel箭头键导航
- 28. 箭头键库导航
- 29. 使用箭头键在控制台应用程序中导航
- 30. 如何实现WPF Datagrid箭头键导航像Tab导航
完美的作品。谢谢! 其他人只需简短注释:foreach(this.Controls中的Control control)不包含所有控件 - 您可能在窗体上有容器(例如system.windows.forms.panel)。 – 2009-08-23 11:42:27
想不到,但似乎完全有效。 (我的目标是有条件地禁用Enter,但同样的想法。)谢谢! – neminem 2013-08-28 23:40:51