2012-02-10 20 views
5

Tengo un problema extraño (probablemente solo para entender) por qué en una aplicación de prueba el foco de enfoque no se muestra hasta que presiono la tecla de tabulación.¿Por qué el Rectángulo de enfoque no se muestra hasta que se presiona la tecla Tab?

Quiero mostrar un cuadro de diálogo con dos radio casillas y dos botones. Cuando visualice el diálogo, me gustaría ver un enfoque directo alrededor de mi primer botón de radio. (Para que el usuario pueda ver dónde está el foco). Ordené los controles y configuré la propiedad tabindex de 0 a 4 para que estén en el orden correcto. (radiobox 1 tiene tabindex 0, ...)

Cuando muestro el cuadro de diálogo, la primera radio tiene el foco, pero no tiene foco alrededor. (Hasta que pulse la tecla de tabulación)

Creé un proyecto winforms completamente vacío (Visual Studio 2010), agregué los controles y lo inicié. Entonces no hay nada especial en absoluto.

¿Puede alguien darme una pista de lo que estoy haciendo mal?

Lo sentimos, aquí está el código de mi muestra:

Public Class Form1 

Private Sub Button1_Click(sender As System.Object, _ 
    e As System.EventArgs) _ 
    Handles Button1.Click 

    Me.Close() 
End Sub 

Private Sub Button2_Click(sender As System.Object, _ 
    e As System.EventArgs) _ 
    Handles Button2.Click 

    Me.Close() 
End Sub 

Private Sub Form1_Shown(sender As Object, _ 
    e As System.EventArgs) _ 
    Handles Me.Shown 

    RadioButton1.Focus() 
    RadioButton1.Select() 
    SendKeys.SendWait("{TAB}") 
    SendKeys.SendWait("+{TAB}") 

End Sub 

End Class 
+0

Ejem ... me olvidaba decir, que estoy usando Windows 7 (64 bits) – AlexS

+0

Tough error para arreglar, nada de lo que intenté funcionó. –

+0

Hice un poco (mucho) más investigación y descubrí que el envío de una tecla "Tab" al formulario invoca el evento Control.ChangeUICues en el que el indicador UICuesEventArgs.ShowFocus está establecido en verdadero. (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.changeuicues.aspx) Después de que se procesa este evento, se puede ver el foco de enfoque. ¿Alguien sabe cómo puedo activar/invocar este evento directamente? No encontré ninguna propiedad que pueda establecer como verdadera ... – AlexS

Respuesta

5

Como comenté, esta es realmente una configuración de preferencia del usuario.

Pero para mostrar el rectángulo, intentan heredar su propio RadioButton y reemplazar la función ShowFocusCues:

Public Class RadioWithFocus 
    Inherits RadioButton 

    Protected Overrides ReadOnly Property ShowFocusCues() As Boolean 
    Get 
     Return True 
    End Get 
    End Property 

End Class 
1

Utilice la Control.Focus() heredada en el método de inicialización del formulario, o donde sea aplicable. Algo así como:

public Form1() { 
    //Other stuff here 
    radiobox1.Focus();// If this is the name of your control 
} 

Otro método para tener en cuenta es Form.Activate. Probablemente sea mejor usarlo en este contexto

También, ActiveControl podría ser útil.

+0

Conocí el Método .Focus y lo probé primero. Su Método .Activate fue una buena idea, pero tampoco funcionó. : -/ – AlexS

+0

ver mi edición ... – annonymously

0

Como LarsTech ha dicho, se trata de un ajuste de usuario. Para Windows 7, puede encontrar esta configuración aquí: Abra el Panel de control/Centro de acceso fácil/Haga que el teclado sea más fácil de usar.

Busque una casilla de verificación con el texto "Subrayar atajos de teclado y teclas de acceso" y verifíquelo.

Vuelva a ejecutar su aplicación y verá que las preguntas de enfoque ahora aparecerán cuando su formulario se cargue por primera vez.

Disfrute

0

para Win32/C++, enviar el mensaje WM_CHANGEUISTATE a la ventana padre:

// Enable focus rect and accelerator underline in all controls. 
    ::SendMessage(WM_CHANGEUISTATE, MAKELONG(UIS_CLEAR, UISF_HIDEACCEL | UISF_HIDEFOCUS), 0); 
Cuestiones relacionadas