Подтвердить что ты не робот

Как узнать, какой элемент управления имеет фокус в .NET Windows Forms?

Как узнать, какой элемент управления имеет фокус в Windows Forms?

4b9b3361

Ответ 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, но прошло какое-то время...