Activador del botón Haga clic en presionar ENTER Al actualizar un campo de texto en C#

StackOverflow https://stackoverflow.com/questions/4279326

  •  28-09-2019
  •  | 
  •  

Pregunta

OK, quiero que el usuario pueda presionar ENTER para iniciar un botón de clic durante la entrada del cuadro de texto.

Tengo el siguiente código:

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
            if (e.KeyValue == 13)
            {
                button3_Click(sender, e);
            }
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

        this.textBox1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);
    }
    private void button3_Click(object sender, EventArgs e)
    {
        if (textBox1.Text == "")
        {
            MessageBox.Show("Please enter a value.", "No name entered", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        else
        {
            if (listBox1.Items.Contains(textBox1.Text) == true)
            {
                MessageBox.Show("You have tried to enter a duplicate.", "No duplicates allowed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                listBox1.Items.Add(textBox1.Text);
                textBox1.Text = "";
            }
        }


    }

Sin embargo, cuando presiono, enter, el valor guarda y luego aparece el cuadro de mensajes diciendo "Ingrese un valor" aproximadamente 4 veces. ¿Cómo puedo hacer que este código haga que el botón con el botón solo suceda una vez en presionar Enter?

¿Hay una forma más fácil de hacer esto?

¡Gracias!

¿Fue útil?

Solución

//Create a new button
//Assuming you have a new button named "acceptButton"
//Assuming your form name is "FormName"
FormName.AcceptButton = acceptButton;
//this button automatically is triggered at enter key is pressed
acceptButton += new Click(acceptButton_Click);

void acceptButton_Click(object sender, EventArgs e) {
     button3_Click(sender, e);
}

o

//Make button3 the one to be activated when enter key is pressed
FormName.AcceptButton = button3;
//so that when enter key is pressed, button3 is automatically fired

Otros consejos

Primero, sé que esta es una publicación muy antigua, en segundo lugar, ¿por qué podría simplemente usar el evento KeyUp del cuadro de texto y simplemente llamar al evento de clic del botón:

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyValue == 13)
    {
        this.Accept_Click(null, null);
    }
}

A menos que me falte algo que sea muy posible ;-)

Gian tenía razón, gracias. El código final es:

        private void textBox1_TextChanged(object sender, EventArgs e)
    {
        this.textBox1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyUp);
    }

    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyValue == 13)
        {
            AcceptButton = button3;
        }
    }

No quiero hacerte sentir mal, pero ¿qué estabas tratando de hacer en el textbox_textChanged ¿método?

Lo primero que quieres hacer es eliminarlo. Lo que hace es agregar el button3_Click hacia KeyUp evento. Cada vez que el texto cambia, lo agrega nuevamente y el button3_Click El método se llamará muchas veces.

Lo que obtienes es probablemente un mensaje de "has intentado ingresar un duplicado". Esto es porque el button3_Click El método se llama más de una vez con el mismo valor (la primera vez que se agrega el valor, y en las siguientes llamadas intenta agregar ese mismo valor nuevamente).

En cualquier caso, intente agregar información a su pregunta, no está muy claro (!) Y tarda un tiempo en entender.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top