我会告诉我的要求.我需要keydown在Windows窗体表单中为每个控件创建一个事件.如果我必须为所有keydown事件做的事情是相同的,那么最好这样做而不是为所有控件手动执行它.
所以我基本上可以这样做:
foreach (Control c in this.Controls)
c.KeyDown+= new KeyEventHandler(c_KeyDown);
Run Code Online (Sandbox Code Playgroud)
但是在这里,foreach不会循环驻留在groupBox或tabControl中的那些控件.我的意思是如果表单(this)包含groupBox或其他一些容器控件,那么我可以获得该特定容器控件的keydown事件.并且foreach不会循环遍历该容器控件内的控件.
问题1:如何为表单中的"所有"控件获取keydown事件?
如果上面的谜题得到解决,那么我的问题就结束了.
这是我可以做的事情:
foreach (Control c in this.Controls)
{
c.KeyDown += new KeyEventHandler(c_KeyDown);
if (c is Container control)
FunctionWhichGeneratesKeyDownForAllItsChildControls(c)
}
Run Code Online (Sandbox Code Playgroud)
我知道FunctionWhichGeneratesKeyDownForAllItsChildControls(c)如果组合框中有组框,我将不得不经历多次以获得所有控件的keydown.我能做到.我的问题是,
问题2:如何检查是否c是容器控件?
Mag*_*nus 18
一个简单的递归函数应该这样做.
private void AddEvent(Control parentCtrl)
{
foreach (Control c in parentCtrl.Controls)
{
c.KeyDown += new KeyEventHandler(c_KeyDown);
AddEvent(c);
}
}
Run Code Online (Sandbox Code Playgroud)