Trigger Fare clic sul pulsante Durante la pressione Invio quando si aggiorna un campo di testo in C#
Domanda
OK, voglio che l'utente sia in grado di premere Invio per avviare un pulsante Click durante la voce della casella di testo.
Ho il codice seguente:
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 = "";
}
}
}
Tuttavia, quando premo premi INVIO il valore salva e quindi la casella di messaggistica si presenta dicendo "Si prega di inserire un valore" circa 4 volte. Come posso fare in modo che questo codice fa sì che il pulsante_click accada solo una volta durante la pressione Invio?
C'è un modo più semplice per farlo?
Grazie!
Soluzione
//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
Altri suggerimenti
Innanzitutto, so che questo è un post molto vecchio, in secondo luogo perché potresti semplicemente usare l'evento keyup della casella di testo e chiamare l'evento di clic del pulsante:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13)
{
this.Accept_Click(null, null);
}
}
A meno che non mi manchi qualcosa che sia del tutto possibile ;-)
Gian aveva ragione, grazie. Il codice finale è:
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;
}
}
Non voglio farti sentire male, ma cosa stavi cercando di fare nel textbox_textChanged
metodo?
La prima cosa che vuoi fare è rimuoverlo. Quello che fa è aggiungere il button3_Click
al KeyUp
evento. Ogni volta che il testo cambia lo aggiunge di nuovo e il button3_Click
Il metodo sarà chiamato molte volte.
Quello che ottieni è probabilmente un messaggio "Hai provato a inserire un duplicato". Questo perché il button3_Click
Il metodo è chiamato più allora una volta con lo stesso valore (la prima volta viene aggiunto il valore e nelle seguenti chiamate cerca di aggiungere di nuovo lo stesso valore).
In ogni caso, prova ad aggiungere informazioni alla tua domanda, è molto poco chiaro (! E impiega un po 'di tempo per capire.