Cada vez que se abre un formulario, el sistema enfoca automáticamente uno de los controles por usted. Por lo que puedo decir, el control que obtiene el foco es el primer control habilitado en el orden de tabulación, según el comportamiento estándar de Windows.¿Cómo especificar qué control debe enfocarse cuando se abre un formulario?
La pregunta es cómo cambiar esto en tiempo de ejecución sin tener que reorganizar dinámicamente el orden de tabulación. Por ejemplo, algunos formularios pueden querer variar el control inicialmente enfocado basado en la lógica del programa, para poner el foco en el control más apropiado. Si solo enfoca algún otro control dentro de su controlador OnLoad
, la lógica predeterminada se ejecuta de todos modos y vuelve a enfocar el control predeterminado.
Si va a escribir en C/C++ y utilizando un procedimiento de ventana crudo o MFC, puede devolver 0 (FALSE
) de su manejador WM_INITDIALOG
, y el valor por defecto de enfoque lógica es ignorada. Sin embargo, no puedo encontrar ninguna forma de hacerlo en Windows Forms. El mejor que he llegado con BeginInvoke
es utilizar para ajustar el foco después de que los OnLoad
acabados, así:
protected override void OnLoad(System.EventArgs e)
{
base.OnLoad(e);
// ... code ...
BeginInvoke(new MethodInvoker(() => this.someControl.Focus()));
}
Debe haber alguna manera apropiada de hacer esto - ¿qué es?
Gracias. ¡Funciona! –
no solo la selección se muestra en contol, pero no puede escribir en el cuadro de texto seleccionado o el orden de tabulación tampoco pasa al siguiente. –