要解决这种情况,我有一个面板,上面有3个文本框。当我隐藏面板时,面板隐藏在选项卡顺序中的第一个文本框将分配给Me.ActiveControl(该窗体),而不管隐藏面板时焦点在哪个文本框上。
我认为隐藏的控件永远无法集中注意力。我在表单上最初发现该问题的其他控件,因此我认为它必须选择一个非隐藏控件来关注。这是错误,还是以此方式设计?
我在简单的表单上使用一个计时器,该计时器每5秒触发一次,将活动控件的名称记录在标签中。
答案 0 :(得分:0)
我已经能够重新创建您的方案,并且它揭示了一种有趣的可能性(稍后会对此进行更多介绍)。
WinForms具有 Selected (或激活)控件的概念。 Control.Select Method与Control.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
。
这是有趣的地方。此时Panel
和TextBox
都是可见的。因此,TextBox
会获得焦点,并在Panel
隐藏时保留焦点。此条件允许隐藏的TextBox
进行键盘输入,并且不会违反有关隐藏控件无法接收焦点的规则。