检测用户控件内部控件焦点

时间:2011-12-11 20:25:53

标签: c# .net user-controls

是否可以检测控件是否已在用户控件中获得焦点?我的意思是我们在设计时在用户控件中添加了一些控件而不是控件我们在窗体上使用用户控件后添加它们。一个典型的例子是面板。我的用户控件就像一个面板,我想检测我的用户控件上的包含(嵌套)控件何时得到任何焦点我做我的事情。

谢谢你们!

1 个答案:

答案 0 :(得分:1)

我接近这个的方式是在创建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());
        }
    }
}