2010-08-21 16 views
9

Sistema: Windows 7 Pro, Visual Studio 2010, C#C# - Empujar Introduzca en MessageBox disparadores de control KeyUp Evento

Tengo un cuadro de texto: textBox1 que establezca su caso:

textBox1.KeyUp += new KeyEventHandler(textBox1_KeyUp); 

private void textBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     button1.PerformClick(); 
    } 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (string.IsNullOrEmpty(textBox1.Text)) 
    { 
     MessageBox.Show("Invalid data", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     return; 
    } 
} 

Funciona bien, el problema es que cuando los datos ingresados ​​no son válidos y se muestra MessageBox, cuando toco ENTER en el botón OK MessageBox, también desencadena el textBox1_KeyUp, lo que hace que MessageBox vuelva a aparecer. Por lo tanto, desencadena el botón OK MessageBox, que hace que desaparezca, y también desencadena el textbox_keyUp que hace que el cuadro de mensaje aparezca nuevamente.

Gracias por su ayuda.

Respuesta

17

Sí, el cuadro de mensaje responde al evento de desactivación de la tecla. Entonces debería tu TextBox. Use el evento KeyDown en su lugar, problema resuelto. También resuelve el molesto PITIDO que el usuario normalmente escucha.

private void textBox1_KeyDown(object sender, KeyEventArgs e) { 
     if (e.KeyData == Keys.Enter) { 
      button1.PerformClick(); 
      e.SuppressKeyPress = true; 
     } 
    } 
+0

Pero este es mi problema, yo no quiero que active tanto, quiero que active sólo el botón de mensaje –

+0

@WoF: Será mejor que lo deletree. Publicación actualizada –

+0

Funcionó, gracias hombre –

0

Los controles solo activarán eventos si tienen foco. Entonces, en su caso, está ejecutando el clic del botón con el foco aún en su cuadro de texto y es por eso que no puede usar Enter en el cuadro de mensaje. La solución es añadir siguiente código dentro método Button1_Click:

var btn = sender as Button; 
btn.Focus(); 

Esta vez el enfoque se realizará en el botón de modo que si se golpea entrar en el cuadro de mensaje ningún caso se activará para cuadro de texto

+0

puedo usar entre el cuadro de mensaje. De hecho, lo que quiero es usar enter SOLAMENTE en el MessageBox, no tanto en el MessageBox como en mi botón –

+0

Bien, pero lo que estaba tratando de decir es que al establecer el foco en el botón puede usar enter en su cuadro de mensaje y no activará el evento de cuadro de texto una y otra vez – tchrikch

1

lo resolví para la vista de lista, se puede trabajar para caja de texto:

private void textBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     textBox1.enable = false; 
     button1.PerformClick(); 
     textBox1.enable = true; 
    } 
}