Wie finde ich heraus, welches Steuerelement in Windows Forms Fokus hat?Wie finde ich heraus, welches Steuerelement den Fokus in .NET Windows Forms hat?
Antwort
Form.ActiveControl
kann sein, was Sie wollen.
Etwas in dieser Richtung:
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
Ich denke, dieser Code von windowsclient.net kam, aber es ist schon eine Weile so gewesen ...
Bitte lassen Sie mich die Antwort bis Sie es abgeschlossen haben. Der Aufruf von 'GetFocus()' hängt im Nirgendwo und die Antwort in dieser Form wird einfach nicht funktionieren. – miroxlav
In C# ich dies tun:
if (txtModelPN != this.ActiveControl)
txtModelPN.BackColor = Color.White;
txtModelPN ist eine Textbox, die ich bei Enter und MouseEnter und De-Highlighting auf Leave, MouseLeave hervorhebe. Außer wenn es die aktuelle Kontrolle ist, setze ich den Hintergrund nicht auf weiß zurück.
Die VB gleichwertig wie dieser
IF txtModelPN <> Me.ActiveControl Then
txtModelPN.BackColor = Color.White
End If
Hinweis wäre, dass ein einziger Anruf Active ist nicht genug, wenn Hierarchien verwendet werden. Stellen Sie sich vor:
Form
TableLayoutPanel
FlowLayoutPanel
TextBox (focused)
(formInstance).ActiveControl
Bezug auf TableLayoutPanel
zurückkehren wird, nicht die TextBox
So verwenden Sie diesen (vollständige Offenlegung: angepasst von 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
Sie diese verwenden können Control Name finden .
Sie können die ActiveControl-Eigenschaft des Formulars verwenden und dieses Steuerelement verwenden.
me.ActiveControl
Oder
Form.ActiveControl
Ich will nur darauf hinweisen, dass, wenn Sie etwas (Set eine .Text Eigenschaft zum Beispiel) geändert haben, es wird die Kontrolle zurück, die Sie zuletzt verwendet. einschließlich Einstellungen wie der .Text nicht immer das Steuerelement, das Fokus hat – PsychoData