我有一个表格,我想知道哪个控件有焦点。
我该怎么做?我见过的最佳解决方案让我迭代屏幕上的所有控件。虽然可行,但知道哪个控件具有焦点似乎还有很多工作要做。
答案 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
事件。