Найдите ориентированный элемент управления в форме (в .netCF) - PullRequest
3 голосов
/ 13 мая 2010

У меня есть форма, которую я хочу знать, какой элемент управления на ней имеет фокус.

Как я могу это сделать? Лучшее решение, которое я видел, состоит в том, чтобы я перебрал все элементы управления на экране. Хотя это выполнимо, кажется, что нужно потрудиться, чтобы узнать, какой элемент управления находится в фокусе.

Ответы [ 2 ]

4 голосов
/ 13 мая 2010

Похоже, ЭТО - это путь для CF.

2 голосов
/ 13 мая 2010

Вы можете делать то, что сказал thelost, или вы можете реализовать свой собственный базовый класс формы, чтобы справиться с этой задачей.

public class BaseForm : Form
{
    public BaseForm() 
    {
        this.Load += new EventHandler(BaseForm_Load);
    }

    void BaseForm_Load(object sender, EventArgs e)
    {
        this.HandleFocusTracking(this.Controls);
    }

    private void HandleFocusTracking(ControlCollection controlCollection)
    {
        foreach (Control control in controlCollection)
        {
            control.GotFocus += new EventHandler(control_GotFocus);
            this.HandleFocusTracking(control.Controls);
        }
    }

    void control_GotFocus(object sender, EventArgs e)
    {
        _activeControl = sender as Control;
    }

    public virtual Control ActiveControl
    {
        get { return _activeControl; }
    }
    private Control _activeControl;

}

Невозможно избежать итерации управления, но если вы сделали это таким образом, итерация будет происходить только один раз, а не каждый раз, когда вы захотите узнать активный элемент управления. Затем вы можете просто вызвать ActiveControl в соответствии со стандартным приложением winforms следующим образом:

Control active = this.ActiveControl;

Единственный недостаток - это то, что если у вас было требование добавить новые элементы управления во время выполнения, вам нужно было бы убедиться, что они правильно подключены к событию control_GotFocus.

...