检测用户控件内部控件焦点
本文关键字:控件 焦点 内部 检测 用户 | 更新日期: 2023-09-27 18:17:26
是否可以检测控件是否已在用户控件中获得焦点?我指的不是我们在设计时在用户控件中添加的一些控件,而是我们在表单上使用用户控件后添加的一些控件。一个典型的例子就是面板。我的用户控件就像一个面板,我想检测包含在我的用户控件上的(嵌套的)控件何时有任何焦点,我做我的事情。
谢谢大家!
我的方法是当UserControl被创建并且你不在设计模式时,循环用户控件中的每个控件,为它们的GotFocus事件添加钩子,并将钩子指向UserControl的一个方法(例如ChildControlGotFocus),该方法反过来引发用户控件主机可以使用的事件。
例如,下面是一个示例UserControl实现了这个功能:public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
if (!this.DesignMode)
{
RegisterControls(this.Controls);
}
}
public event EventHandler ChildControlGotFocus;
private void RegisterControls(ControlCollection cControls)
{
foreach (Control oControl in cControls)
{
oControl.GotFocus += new EventHandler(oControl_GotFocus);
if (oControl.HasChildren)
{
RegisterControls(oControl.Controls);
}
}
}
void oControl_GotFocus(object sender, EventArgs e)
{
if (ChildControlGotFocus != null)
{
ChildControlGotFocus(this, new EventArgs());
}
}
}