ale*_*555 0 c# user-controls keydown winforms
在表格上我有一个带有一些按钮的面板.单击button1时,我将面板替换为具有标签的新UserControl(例如this.Controls.Clear(),this.Controls.Add(UserControl1)).除了我的userControl上的标签有一个KeyDown处理程序.它工作正常,事件触发,但不是键,向上,向下,向左和向右.任何人都可以解释为什么这些键之间存在差异?是什么决定事件是否被解雇?
两个基本原因.首先是神秘的一个:Label控件无法获得焦点,因此无法看到击键.其KeyDown事件隐藏在设计器中的原因.不太确定为什么你会看到任何按键.更常见的原因是光标和TAB键用于导航,将焦点从一个控件移动到另一个控件.在将密钥传递给控件之前完成.您必须覆盖控件,以便可以覆盖其IsInputKey()方法.但更实际的是,您将覆盖UserControl的ProcessCmdKey(),而不是解决这两个问题.
另请注意,您的程序中存在令人讨厌的句柄泄漏. 永远不要调用Controls.Clear(),也不要在你删除的控件上调用Dispose()方法.除非你打算以后重复使用它们,否则不常见.这是一种令人讨厌的泄漏,垃圾收集器无法解决并最终使程序在首次使其变得缓慢和笨拙之后崩溃.
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |