Кнопка триггера при нажатии клавиши ввода при обновлении текстового поля в С#

Хорошо, я хочу, чтобы пользователь мог нажать клавишу ввода, чтобы инициировать нажатие кнопки во время ввода текстового поля.

У меня есть следующий код:

        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 = "";
            }
        }


    }

Однако, когда я нажимаю ввод, значение сохраняется, а затем появляется окно MessageBox, говорящее «пожалуйста, введите значение» примерно 4 раза. Как я могу заставить этот код делать button_click только один раз при нажатии ввода?

Есть ли более простой способ сделать это?

Спасибо!


person RHodgett    schedule 25.11.2010    source источник


Ответы (3)


Во-первых, я знаю, что это очень старый пост, во-вторых, почему вы можете просто использовать событие KeyUp текстового поля и просто вызвать событие Click кнопки:

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

Если я что-то упустил, что вполне возможно ;-)

person Mark Kram    schedule 06.08.2012

Джан был прав, спасибо. окончательный код:

        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;
        }
    }
person RHodgett    schedule 29.11.2010

Я не хочу вас расстраивать, но что вы пытались сделать в методе textbox_textChanged?

Первое, что вы хотите сделать, это удалить его. Что он делает, так это добавляет button3_Click к событию KeyUp. Каждый раз, когда текст изменяется, он добавляет его снова, и метод button3_Click будет вызываться много раз.

То, что вы получаете, вероятно, является сообщением «Вы попытались ввести дубликат». Это связано с тем, что метод button3_Click вызывается более одного раза с одним и тем же значением (в первый раз значение добавляется, а при следующих вызовах он пытается снова добавить то же значение).

В любом случае, попробуйте добавить информацию к вашему вопросу, это очень неясно(!) и требует времени, чтобы понять.

person Neowizard    schedule 25.11.2010
comment
Я получил код textbox_textchanged из: neowin.net/forum/topic/ - person RHodgett; 25.11.2010