ActiveControl隐藏了

时间:2019-04-05 13:42:01

标签: vb.net winforms

要解决这种情况,我有一个面板,上面有3个文本框。当我隐藏面板时,面板隐藏在选项卡顺序中的第一个文本框将分配给Me.ActiveControl(该窗体),而不管隐藏面板时焦点在哪个文本框上。

我认为隐藏的控件永远无法集中注意力。我在表单上最初发现该问题的其他控件,因此我认为它必须选择一个非隐藏控件来关注。这是错误,还是以此方式设计?

我在简单的表单上使用一个计时器,该计时器每5秒触发一次,将活动控件的名称记录在标签中。

1 个答案:

答案 0 :(得分:0)

我已经能够重新创建您的方案,并且它揭示了一种有趣的可能性(稍后会对此进行更多介绍)。

WinForms具有 Selected (或激活)控件的概念。 Control.Select MethodControl.Focus Method相关。 Focus Method-Remarks section文档是相关的。

  

如果满足以下所有条件,则可以选择一个控件并接收输入焦点   是true:ControlStyles的Selectable值设置为true,它是   包含在另一个控件中,并且其所有父控件都   可见并启用。

...

  

焦点是主要用于自定义控件的低级方法   作者。相反,应用程序程序员应使用Select方法   或子控件的ActiveControl属性,或激活   表单方法。

ContainerControl.ActiveControl Property指向最后一个选定的控件。

之所以选择Panel中的按Tab键顺序的第一个控件是因为Panel.Visible属性设置为false时执行的代码。 Visible Property设置程序调用{​​{3}},依次调用SetVisibleCore,调用SelectNextIfFocused,最后调用SelectNextControlInternal选择您的TextBox1

这是有趣的地方。此时PanelTextBox都是可见的。因此,TextBox会获得焦点,并在Panel隐藏时保留焦点。此条件允许隐藏的TextBox进行键盘输入,并且不会违反有关隐藏控件无法接收焦点的规则。