在表单中找到焦点控件(在.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
事件。