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

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

我怎样才能做到这一点? 我见过的最佳解决方案让我迭代屏幕上的所有控件。 虽然可行,但只是知道哪个控件具有焦点似乎很多工作。

看起来这是继续CF的方式。

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

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事件。