прерывать событие button_click при нажатии кнопки ввода

Это простой способ отменить событие щелчка, когда пользователь нажимает кнопку ввода (вместо нажатия кнопки мыши на кнопку?)

я пробовал с:

    private void button3_Click(object sender, EventArgs e)
    {
        KeyEventArgs ke = e as KeyEventArgs;
        if (ke != null)
        {
            if (ke.KeyCode == Keys.Enter)
            {
                return;
            }

        }
    }

Но ке равно нулю


person iskrzycki    schedule 25.09.2013    source источник
comment
Не уверен, почему вы хотите это сделать. Это стандартная особенность работы программ Windows, и вы должны стремиться придерживаться нормы (за исключением некоторых необычных ситуаций). Если вы не хотите, чтобы это была кнопка по умолчанию, вы можете удалить ее из свойств формы.   -  person awudoin    schedule 25.09.2013
comment
Я использую сканер штрих-кода в своей winform. Я настроил сканер так, чтобы он нажимал Enter после каждого сканирования. Но если кнопка формы имеет фокус и пользователь сканирует штрих-код, кнопка будет выполнять событие щелчка (поскольку сканер штрих-кода сканирует код и «нажимает» ввод)   -  person iskrzycki    schedule 25.09.2013
comment
Я думаю, что лучшим подходом было бы отключить кнопку до тех пор, пока действительный ввод не будет введен через любое текстовое поле. Это предотвратило бы случайное нажатие сканером и по-прежнему поддерживало бы стандарт, который пользователи ожидают от WinForms. Я знаю, что многие пользователи предпочитают использовать клавиатуру, а не мышь (я часто так и делаю), и отключение кнопки ввода будет их раздражать.   -  person awudoin    schedule 25.09.2013
comment
В этой форме пользователь должен отсканировать несколько штрих-кодов и установить несколько параметров в полях со списком, списках и других окнах, поэтому все элементы управления должны быть включены во время этой операции.   -  person iskrzycki    schedule 25.09.2013


Ответы (4)


Да будет ноль. потому что EventArgs не KeyEventArgs

KeyEventArgs будет передано в качестве параметра событиям KeyDown или KeyUp. Ты путаешь вещи.

person Sriram Sakthivel    schedule 25.09.2013
comment
Кроме того, button3_Click является обработчиком событий, подписанным на событие Click для класса Button, поэтому это означает, что кнопка нажата, а не нажата. - person Artur Mustafin; 25.09.2013

Вы можете сделать что-то вроде этого

private bool flag = false;
private void button1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Return)
    {
        flag = true;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    if (flag)
    {
        flag = false;
        return;
    }
    //else do original task
}
person Hossain Muctadir    schedule 25.09.2013
comment
Немного грязно, но, возможно, сработает :) Спасибо, но @Gary Walker опубликовал, на мой взгляд, лучшее решение. - person iskrzycki; 25.09.2013

Вы можете обработать событие KeyPress для кнопки и отключить или игнорировать клавишу ввода вместо возврата при нажатии кнопки

person appcoder    schedule 25.09.2013

person    schedule
comment
Кстати, я помню, как я изначально придумал это решение. Я запустил код в отладчике и проверил тип объекта, когда я запускал его с помощью мыши и клавиатуры, чтобы активировать кнопку, и увидел, что это разные типы объектов. Если вы используете Enter/Space, вы получаете тип EventArgs, поэтому вы не можете протестировать EventArgs, поскольку MouseEventArgs происходит от EventArgs. - person Gary Walker; 25.09.2013