Обнаружение фокуса внутренних элементов управления пользователя - PullRequest
1 голос
/ 12 декабря 2011

Можно ли определить, был ли элемент управления сфокусирован в пользовательском элементе управления? Я имею в виду не некоторые элементы управления, которые мы добавляем в пользовательский элемент управления во время разработки, а те элементы управления, которые мы добавляем после использования пользовательского элемента управления в форме. Подлый пример - панели. Мой пользовательский элемент управления действует как панель, и я хочу определить, когда содержащийся (вложенный) элемент управления на моем пользовательском элементе управления получил какой-либо фокус, я делаю свое дело.

Спасибо всем!

1 Ответ

1 голос
/ 12 декабря 2011

Способ, которым я бы подошел к этому, - это когда пользовательский элемент управления создается, а вы не находитесь в режиме разработки, циклически перебирая каждый из элементов управления в пользовательском элементе управления, добавляя перехваты к их событиям 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());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...