是否可以检测控件是否已在用户控件中获得焦点?我指的不是一些我们在设计时添加到用户控件中的控件,而是我们在窗体上使用用户控件后添加的控件。面板就是一个很好的例子。我的用户控件就像一个面板,我想要检测用户控件上包含的(嵌套的)控件何时获得任何焦点,我会做我的事情。
谢谢大家!
发布于 2011-12-12 05:22:40
我处理这个问题的方法是,当创建了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());
}
}
}https://stackoverflow.com/questions/8467193
复制相似问题