我会告诉我的要求。我需要有一个keydown
中每个控件的事件Windows 窗体 http://en.wikipedia.org/wiki/Windows_Forms形式。如果我必须对所有 keydown 事件执行的操作相同,那么最好这样做,而不是为所有控件手动执行此操作。
所以我基本上可以这样做:
foreach (Control c in this.Controls)
c.KeyDown+= new KeyEventHandler(c_KeyDown);
但在这里,foreach 不会在位于 groupBox 或 tabControl 内的控件内循环。我的意思是,如果表单(此)包含 groupBox 或其他一些容器控件,那么我可以获得该特定容器控件的 keydown 事件。还有foreach
不循环访问驻留在该容器控件内的控件。
问题 1:如何获取表单中“所有”控件的 keydown 事件?
如果上面的谜题解决了,那么我的问题就结束了。
这是我可以做的其他事情:
主要是伪代码
foreach (Control c in this.Controls)
{
c.KeyDown += new KeyEventHandler(c_KeyDown);
if (c is Container control)
FunctionWhichGeneratesKeyDownForAllItsChildControls(c)
}
我知道我必须经历FunctionWhichGeneratesKeyDownForAllItsChildControls(c)
如果组框内有组框等,则多次获得所有控件的 keydown 。我能做到。我的问题是,
问题2:如何检查是否c
是容器控件吗?
一个简单的递归函数应该可以做到这一点。
private void AddEvent(Control parentCtrl)
{
foreach (Control c in parentCtrl.Controls)
{
c.KeyDown += new KeyEventHandler(c_KeyDown);
AddEvent(c);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)