C#WinForms-循环所有控件以应用事件处理程序,而不是在SplitContainer中工作?
我有以下功能:C#WinForms-循环所有控件以应用事件处理程序,而不是在SplitContainer中工作?,c#,winforms,loops,controls,C#,Winforms,Loops,Controls,我有以下功能: private void setupFocusControls(Control parent) { foreach (Control control in parent.Controls) { control.GotFocus += HandleFocus; } } private void HandleFocus(object sender, EventArgs e)
private void setupFocusControls(Control parent)
{
foreach (Control control in parent.Controls)
{
control.GotFocus += HandleFocus;
}
}
private void HandleFocus(object sender, EventArgs e)
{
Control control = (Control)sender;
thisFormName = this.Name;
thisControlName = control.Name.ToString();
if (bHelpSystemActive)
{
bHelpSystemActive = false;
if ((ModifierKeys & Keys.Control) == Keys.Control)
{
HelpSystem hs = new HelpSystem(thisFormName, thisControlName);
hs.ShowDialog();
}
else
{
showTooltipForControl(control, thisFormName);
}
return;
}
}
我把它叫做Form_Load函数:
private void Labeller_Load(object sender, EventArgs e)
{
setupFocusControls(this);
fillListBox();
}
它的作用是显示我编写的自定义帮助系统。如果未单击任何控制键,则我将在工具提示中显示该信息。如果按下控制键,则显示编辑器。真的很简单
现在,这段代码在另一个表单上完美地工作,它使用面板作为表单控件的容器。问题是,我现在想把这个功能添加到一个单独的表单中。我已经添加了所有代码,但是表单上的控件都没有添加HandleFocus事件。此表单与工作表单之间的唯一区别在于,它使用splitContainer作为其容器
我的问题是,setupFocusControls
函数为什么不像我工作表单上的面板那样在splitContainer中循环?那么,我该如何着手修复它呢?我显然不希望有几个函数来执行这个(我认为)简单的任务
干杯。假设问题在于您没有将事件分配给表单上的每个控件(仅顶级控件),那么解决方法应该是更改您的
setupFocusControls(control)
方法:
private void setupFocusControls(Control parent)
{
foreach (Control control in parent.Controls)
{
control.GotFocus += HandleFocus;
// add the following line to recurse throughout the control tree
setupFocusControls(control);
}
}
这将通过递归每个控件的子控件,向每个控件添加HandleFocus
事件处理程序。我希望这对你有用
另外,如果要将事件处理程序添加到所有控件,包括父控件
控件,可以编写setupFocusControls
方法,如下所示:
private void setupFocusControls(Control parent)
{
parent.GotFocus += HandleFocus;
foreach (Control child in parent.Children)
setupFocusControls(child);
}
是否希望窗体上的每个控件都有该事件?还是仅仅是顶级的?如果需要每个控件,则需要使用递归将事件分配给每个控件。能否显示拆分容器窗体的
OnLoad
代码?是的,每个控件都需要此事件,因为我的帮助系统是基于每个控件配置的。i、 e.详细说明每个控件及其用途。我该怎么做呢?我在另一个窗体上有50多个控件,使用上面的方法它可以完美地工作。我认为它会很好地应用:(@lokisinlair看看我的答案。这有用吗?很好用。谢谢你,你是个明星!:)我喜欢简单的解决方法。