让控件真正获取输入焦点(winform)
时间:2011-05-06 来源:祭天
众所周知 Control.Focus() 可以让控件获得焦点;即使这个控件处于继承自 ScrollableControl 的容器内,并且不在显示的范围内,Focus 方法也会将滚动条滚动至该控件的顶端。
但是有一种情况是例外的,当这个控件是在 TabControl 的 TabPage 里,而 TabControl 当前的 TabPage 不是控件所在的那一个,调用控件的 Focus 方法时,并不会自动选中所在的 TabPage ,所以我写了个方法来手动选中。原理很简单,递归+判断父控件。
上码:
Public Sub SelectControl(ByVal control As Control) Me.SelectControl(Me, control) End Sub Public Sub SelectControl(ByVal container As Control, ByVal control As Control) If (control.Parent Is Nothing OrElse control.Parent Is container) Then control.Focus() Return End If Me.SelectControl(container, control.Parent) If (TypeOf control.Parent Is TabPage) Then DirectCast(control.Parent.Parent, TabControl).SelectedTab = control.Parent End If If (TypeOf control Is TabPage) Then DirectCast(control.Parent, TabControl).SelectedTab = control Return End If control.Focus() End Sub
相关阅读 更多 +