2009-03-18 7 views

Antwort

27

Form.ActiveControl kann sein, was Sie wollen.

+0

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

-2

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 ...

+2

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

3

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 
7

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 
1

Sie diese verwenden können Control Name finden .

1

Sie können die ActiveControl-Eigenschaft des Formulars verwenden und dieses Steuerelement verwenden.

me.ActiveControl 

Oder

Form.ActiveControl