在表单我有一些按钮的面板。当单击button1时,我用一个带有标签的新UserControl替换该面板(例如this.Controls.Clear()
,this.Controls.Add(UserControl1)
)。除了我的userControl上的标签有一个KeyDown处理程序。它工作正常,事件触发,但不适用于向上,向下,向左和向右键。任何人都可以解释为什么这些键之间有区别吗?什么决定事件是否被解雇?KEYDOWN没有发射的上,下,左,右
回答
两个基本原因。首先是神秘的:标签控件无法获得焦点,因此无法看到击键。其KeyDown事件隐藏在设计器中的原因。不太确定为什么你看到任何按键。更常见的原因是光标和TAB键用于导航,将焦点从一个控件移动到另一个控件。在之前完成这个键被传递给控件。您必须重写控件,以便可以重写其IsInputKey()方法。但是更实际的情况是,您会覆盖UserControl的ProcessCmdKey()来解决这两个问题。
另外请注意,你有你的程序中一个讨厌的句柄泄漏。 从不调用Controls.Clear(),而不调用您删除的控件上的Dispose()方法。除非您打算稍后重用它们,否则不常见。这是垃圾收集器无法解决的一种令人讨厌的泄漏,并且在首先使程序变得缓慢且笨拙后最终崩溃。
就是这样!由于KeyDown事件被按钮隐藏(要使用按键浏览按钮:向上,向下,向左,标签和输入点击),事件并未触发。在清除控件之前调用panel.Dispose()解决了我的问题。非常感谢你! – alex555 2012-08-01 10:49:54
根据MSDN:
此事件支持.NET Framework基础,不适合直接从您的代码使用。
当用户按下一个键时标签有焦点时发生。
编辑:似乎没有这种替代事件。从我读过的,箭头键肯定应该被检测到。请提供一些代码。
你应该覆盖的方法ProcessCmdKey代替。箭头键的处理方式与其他标准键不同。另一种解决方案是这样的:Microsoft建议的http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx。
要处理箭头键,您既可以在窗体的KeyPreview属性设置为true,然后在形式层面,而不是具体的控制水平处理它们。我已经这样做了,它完美无缺!
在的情况下,上述方法不为你工作,然后再考虑ProcessCmdKey
是这样的:
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if(KeyData == Keys.Right)
{
//Move Right
return true;
}
else
{
return base.ProcessCmdKey(msg, keyData);
}
}
你没有提到你的事件在用户控件或宿主窗体中被处理的位置?如果它们在主机窗体上处理,则在添加用户控件的新实例时,您需要将所有事件重新注册到事件句柄。 – Munawar 2012-08-01 08:19:57
- 1. 4 Vector2点左上右上左下右下
- 2. KEYDOWN按下左侧的KEYUP
- 3. 滚动子视图左右,但没有向上或向下
- 4. 下拉没有发射OnSelectedIndexChanged
- 5. 如何在左下角到右上角反射阵列?
- 6. 发射所有keydown/up事件contenteditable div
- 7. jQuery的切换左下到右上
- 8. WPF中的填充(左,上,右,下)
- 9. 左/右和上/下刷卡导航
- 10. 没有发射
- 11. 没有发射
- 12. 没有发射
- 13. 没有发射
- 14. 没有发射
- 15. 没有发射
- 16. 没有发射
- 17. 没有发射
- 18. 没有发射
- 19. 如何在android的左上角和右下角左右对齐按钮?
- 20. 所有方向的滑动手势(左,右,上,下)
- 21. KeyDown在jquery没有更新时按下
- 22. MySQL的左用(没有行)连接条件上右表
- 23. 左右边框没有整屏
- 24. 更改从左到右,从上到下,到上下,从左到右的搜索流程
- 25. 没有在SketchFlow中触发KeyDown
- 26. PST何时从左到右和从右到左显示上下文?
- 27. 右表行左下行
- 28. 如何为UIView的左下角,右下角和左上角设置cornerRadius?
- 29. SqlConnection.SqlInfoMessageEvent没有发射
- 30. WhenActivated没有发射
请使用一些代码来说明你已经写过的处理程序 – HatSoft 2012-08-01 07:55:08
看看这篇文章,它可能会帮助你:http://stackoverflow.com/questions/1646998/up-down-left-and-right -arrow-keys-do-not-trigger-keydown-event – SidAhmed 2012-08-01 08:00:30