【发布时间】:2011-09-14 02:15:15
【问题描述】:
我在为表单上的所有控件设置相同的事件处理程序时遇到问题。 我想在我的应用程序中统一处理按下的 f5-f7 按钮,所以我尝试为表单上的所有控件注册相同的事件处理程序。 我插入了
foreach (System.Windows.Forms.Control cont in this.Controls)
cont.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyPress);
在 InitializeComponent() 函数中自动生成 ResumeLayout/PerformLayout 调用之前。别介意 MainForm_KeyPress 这个名字,它现在实际上是一个 KeyDown 事件处理程序。
我还尝试将代码插入从构造函数调用的 init() 函数中。 但结果是一样的:当我按键时,事件没有发生。焦点位于表单的一个按钮上。
但是,如果我使用设计工具实现其中一个按钮的处理程序(将函数名称复制到 KeyPress 事件字段),则如果按钮处于焦点,则事件会正确引发。
任何想法为什么 foreach 不起作用?
【问题讨论】:
-
一个事件处理程序来统治它们?
-
请不要在标题前加上“C#:”。这就是标签的用途。
-
@Jason - 在黑暗中数据绑定它们。
-
@Jason 是的,我想要一些特殊的按钮来统一工作。这些按钮调用设备日志捕获,并且日志是时间相关的,因此无论焦点在哪里,都必须处理这些按钮的按下事件。
标签: c# visual-studio-2010 keyboard-events