Нажмите триггерную кнопку при нажатии Enter при обновлении текстового поля в C # - PullRequest
0 голосов
/ 25 ноября 2010

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

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

        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 раз.Как сделать так, чтобы этот код вызывал нажатие кнопки только один раз при нажатии клавиши ввода?

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

Спасибо!

Ответы [ 4 ]

4 голосов
/ 28 ноября 2010
//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);
}

или

//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
1 голос
/ 06 августа 2012

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

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

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

0 голосов
/ 29 ноября 2010

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

        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;
        }
    }
0 голосов
/ 25 ноября 2010

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

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

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

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

...