Trigger Fare clic sul pulsante Durante la pressione Invio quando si aggiorna un campo di testo in C#

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

  •  28-09-2019
  •  | 
  •  

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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top