Как узнать, какой элемент управления имеет фокус в Windows Forms?
Как узнать, какой элемент управления имеет фокус в .NET Windows Forms?
Ответ 1
Form.ActiveControl
может быть тем, что вы хотите.
Ответ 2
Обратите внимание, что одного вызова ActiveControl недостаточно, когда используются иерархии. Представьте себе:
Form
TableLayoutPanel
FlowLayoutPanel
TextBox (focused)
(formInstance).ActiveControl
вернет ссылку на TableLayoutPanel
, а не TextBox
Поэтому используйте это (полное раскрытие: адаптировано из этого ответа С#)
Function FindFocussedControl(ByVal ctr As Control) As Control
Dim container As ContainerControl = TryCast(ctr, ContainerControl)
Do While (container IsNot Nothing)
ctr = container.ActiveControl
container = TryCast(ctr, ContainerControl)
Loop
Return ctr
End Function
Ответ 3
В С# я делаю это:
if (txtModelPN != this.ActiveControl)
txtModelPN.BackColor = Color.White;
txtModelPN - это текстовое поле, которое я выделяю для ввода и mouseEnter и де-подсветки в Leave, MouseLeave. За исключением того, что это текущий элемент управления, я не устанавливаю задний фон обратно на белый.
Эквивалент VB будет таким:
IF txtModelPN <> Me.ActiveControl Then
txtModelPN.BackColor = Color.White
End If
Ответ 4
Вы можете использовать это, чтобы найти по Control Name.
If DataGridView1.Name = Me.ActiveControl.Name Then
TextBox1.Visible = True
Else
TextBox1.Visible = False
End If
Ответ 5
Вы можете использовать свойство ActiveControl формы и можете использовать этот элемент управления.
me.ActiveControl
или
Form.ActiveControl
Ответ 6
Что-то в этом роде:
Protected Function GetFocusControl() As Control
Dim focusControl As Control = Nothing
' Use this to get the Focused Control:
Dim focusHandle As IntPtr = GetFocus()
If IntPtr.Zero.Equals(focusHandle) Then
focusControl = Control.FromHandle(focusHandle)
End If
' Note that it returns NOTHING if there is not a .NET control with focus
Return focusControl
End Function
Я думаю, что этот код пришел из windowsclient.net, но прошло какое-то время...