在表单中找到焦点控件(在.netCF中)

时间:2010-05-13 18:33:22

标签: c# .net compact-framework controls focus

我有一个表格,我想知道哪个控件有焦点。

我该怎么做?我见过的最佳解决方案让我迭代屏幕上的所有控件。虽然可行,但知道哪个控件具有焦点似乎还有很多工作要做。

2 个答案:

答案 0 :(得分:4)

看起来THIS是继续使用CF的方式。

答案 1 :(得分:2)

您可以执行最后所说的内容,也可以实现自己的表单基类来为您处理任务。

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;

}

不可能避免控制迭代,但如果你这样做,迭代只会发生一次,而不是每次你想知道活动控件。然后,您可以按照标准winforms应用程序调用ActiveControl,如下所示:

Control active = this.ActiveControl;

唯一的缺点是,如果您需要在运行时添加新控件,那么您必须确保它们已正确连接到control_GotFocus事件。