Come individuare il controllo attivo in Windows Forms?Come scoprire quale controllo è attivo nei Windows Form di .NET?
risposta
Form.ActiveControl
può essere quello che vuoi.
Qualcosa in questo senso:
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
Penso che questo codice è venuto da windowsclient.net, ma è stato un po 'così ...
Per favore lasciami votare la risposta fino a quando non la completi. La chiamata di 'GetFocus()' non si trova in nessun posto e la risposta in questo modulo semplicemente non funzionerà. – miroxlav
In C# faccio questo:
if (txtModelPN != this.ActiveControl)
txtModelPN.BackColor = Color.White;
txtModelPN è una casella di testo che sto evidenziando su enter e mouseEnter e de-highlighting su Leave, MouseLeave. Tranne se è il controllo corrente, non lo sfondo bianco.
VB equivalente sarebbe come questo
IF txtModelPN <> Me.ActiveControl Then
txtModelPN.BackColor = Color.White
End If
Si noti che una singola chiamata a ActiveControl non è sufficiente quando si utilizzano le gerarchie. Immaginate:
Form
TableLayoutPanel
FlowLayoutPanel
TextBox (focused)
(formInstance).ActiveControl
tornerà riferimento alla TableLayoutPanel
, non il TextBox
Così utilizzare questo (full disclosure: adattato da this C# answer)
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
È possibile utilizzare questo per trovare per nome di controllo .
If DataGridView1.Name = Me.ActiveControl.Name Then
TextBox1.Visible = True
Else
TextBox1.Visible = False
End If
È possibile utilizzare il propert ActiveControl del modulo e utilizzare tale controllo.
me.ActiveControl
O
Form.ActiveControl
Voglio solo sottolineare che se è stato cambiato qualcosa (impostare una proprietà .Text per esempio) verrà restituito il controllo che l'ultimo utilizzato. incluso l'impostazione di cose come il .Text non sempre il controllo che ha lo stato attivo – PsychoData