2011-01-04 14 views
33

me pregunto por qué este código no logra enfocar el cuadro de texto ...?textbox.Focus() no funciona en C#

private void sendEmail_btn_Click(object sender, EventArgs e) 
{  
    String sendTo = recipientEmail_tbx.Text.Trim(); 
    if (!IsValidEmailAddress(sendTo)) 
    { 
     MessageBox.Show("Please Enter valid Email address","Cognex" MessageBoxButtons.OK, MessageBoxIcon.Error);     
     recipientEmail_tbx.Focus(); 
    } 
} 
+3

El código que ha publicado no compila: la mejor coincidencia de sobrecarga para la llamada 'MessageBox.Show' tiene algunos argumentos no válidos. Una vez que se solucionó (especifiqué un título), el código funciona exactamente como se esperaba y establece el foco en el cuadro de texto. ¿Cuál es el problema? ¿Desea que el texto que ya se ha ingresado aparezca * seleccionado *? –

+0

@Cody: está editado ... comprueba ahora :) –

+0

Como dije, incluso una vez que arreglé la llamada a 'MessageBox.Show' agregando una cadena de subtítulos (exactamente lo mismo que tú), el código sigue funcionando bien. Después de que se muestre el cuadro de mensaje, el foco se establece en el cuadro de texto. ¿Por qué dices que "no funciona"? ¿Estabas esperando que el texto que se ha ingresado en el cuadro de texto aparezca seleccionado/resaltado? –

Respuesta

86

Uso Select() lugar:

recipientEmail_tbx.Select(); 

Focus es un método de bajo nivel destinado principalmente a los autores el control personalizado. En su lugar, los programadores de aplicaciones deben usar el método Seleccionar o la propiedad ActiveControl para controles secundarios o el método Activar para formularios.

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

+0

thanks..Form estaba fuera de foco cuando aparece el cuadro de mensaje ... –

+2

'Error No sobrecarga para el método 'Seleccionar' toma 0 argumentos \t ' –

+1

La sobrecarga sin parámetros ha existido desde 1.1: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.select.aspx – Alfie

2

Incluso probé con una gran cantidad de soluciones anteriores pero ninguno de ellos trabajaron para mí, como estoy tratando de centrarse en la carga de la página. Finalmente obtuve esta solución y funcionó.

private void txtBox_LayoutUpdated(object sender, EventArgs e) 
{ 
    txtBox.Focus(); 
} 
0

Add Delay some miliSec. Delay luego llame al Focus() y no olvide poner dentro de Dispatcher.

Task.Delay(100).ContinueWith(_ => 
    { 
     Application.Current.Dispatcher.Invoke(new Action(() => 
     { 
      TextBoxNAme.Focus(); 
     })); 
    });