使用最低选项卡索引将焦点重置为控件

时间:2014-06-24 22:10:16

标签: vb.net winforms

我有一个重复使用的表单。也就是说,不是每次都创建表单的新实例,而是保持表单隐藏,并在需要时使表单可见。 (我继承的设计;我认为这是性能优化。)

问题:第二次使用表单时,从第一次使用表单开始,重点是“确定”或“取消”按钮。

用户希望焦点以第一次显示表单时的方式开始 - 在具有最低标签索引的控件上。

如果只有一个这样的表单,我会破解它:添加一行硬连线到所需的控件。

但是有很多这样的形式,可见性逻辑在一个共同的基类中。

所以这样做会更有意义,并告诉表单专注于它的第一个(最低tabindex)控件。

有一种简单的方法吗?

(我可以遍历所有控件,但是我必须正确处理嵌套控件。由于GUI必须在第一次显示表单时执行此操作,我希望有一些方法我可以调用它来做对我来说。)

(在VB.net中编码,但C#答案没问题。)

2 个答案:

答案 0 :(得分:2)

这是一个单行,找到下一个控件的逻辑作为方法SelectNextControl()公开。您应该从Form对象开始,该对象永远不会得到焦点,并要求它在Tab键顺序中找到下一个。哪个是具有最低TabIndex的孩子,无论它有什么价值。

这样的事情:

public void ShowAgain() {
    this.Show();
    this.SelectNextControl(this, true, true, true, true);
}

并且认为不可见的Form对象是一个相当重要的资源占用,为了方便起见,占用了大量的操作系统资源。当然,你也可以关闭/处理它,并在需要时重新创建它。 YMMV。

答案 1 :(得分:1)

您可以尝试设置ActiveControl属性,然后才能显示表单:

_frm.ActiveControl = null;

这应该清除窗体的活动控件并从其控件中移除焦点。