2009-03-18 29 views

Respuesta

27

Form.ActiveControl puede ser lo que quieras.

+0

Sólo quiero señalar que si ha cambiado algo (establecer una propiedad .Texto por ejemplo) devolverá el control que tenían la última. incluso configurar cosas como .Text no siempre el control que tiene el foco – PsychoData

-2

Algo a lo largo de estas líneas:

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 

Creo que este código de vino de windowsclient.net, pero ha sido un tiempo tan ...

+2

Por favor, déjame downvote la respuesta hasta que lo completes. La llamada de 'GetFocus()' no funciona y la respuesta en esta forma simplemente no funcionará. – miroxlav

3

En C# hago esto:

 if (txtModelPN != this.ActiveControl) 
      txtModelPN.BackColor = Color.White; 

txtModelPN es un cuadro de texto que estoy resaltando al ingresar y al mouseIntroducir y quitar resaltado en Dejar, Dejar de ratón. Excepto si es el control actual, no restablezco el fondo a blanco.

La VB equivalente sería así

IF txtModelPN <> Me.ActiveControl Then 
    txtModelPN.BackColor = Color.White 
End If 
7

Tenga en cuenta que una sola llamada a ActiveControl no es suficiente cuando se utilizan las jerarquías. Imagínese:

Form 
    TableLayoutPanel 
     FlowLayoutPanel 
      TextBox (focused) 

(formInstance).ActiveControl volverá referencia a TableLayoutPanel, no el TextBox

a fin de utilizar esto (la revelación completa: adaptado de 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

Usted puede usar esto para encontrar por Nombre de control .

If DataGridView1.Name = Me.ActiveControl.Name Then 
     TextBox1.Visible = True 
    Else 
     TextBox1.Visible = False 
    End If 
1

Puede utilizar la propiedad ActiveControl del formulario y puede usar ese control.

me.ActiveControl 

O

Form.ActiveControl 
Cuestiones relacionadas