2013-09-25 6 views
1

ли простой способ отменить событие щелчка, когда пользователь нажать кнопку ввода на кнопкуперерыв button_click событие при входе нажатии

я попробовал с (вместо мыши на кнопку):

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

     } 
    } 

Но К.Е. null

+0

Не знаю, почему вы бы хотели это сделать. Это стандартная особенность работы программ Windows, и вы должны стремиться оставаться с нормой (за исключением некоторых необычных ситуаций). Если вы не хотите, чтобы это была кнопка по умолчанию, вы можете удалить ее из свойств формы. – awudoin

+0

Я использую сканер штрих-кода в моей winform. Я настроил сканер, чтобы нажать enter после каждого сканирования. Но если кнопка формы имеет фокус и пользователь сканирует штрих-код, кнопка будет делать событие click (потому что код сканирования сканера штрих-кода и «нажмите») введите – iskrzycki

+0

. Я бы подумал, что лучшим подходом было бы отключить кнопку до тех пор, пока действительный ввод не будет введен через любое текстовое поле. Это предотвратит случайный «щелчок» со сканером и по-прежнему будет поддерживать стандарт, который пользователи ожидают с помощью WinForms. Я знаю, что многие пользователи предпочитают использовать клавиатуру над мышью (я часто это делаю), и отключение кнопки ввода будет раздражать их. – awudoin

ответ

2
public void btnClick(object sender, EventArgs e) 
{ 
    bool IsMouse = (e is System.Windows.Forms.MouseEventArgs); 

    // If not mouse, they hit spacebar or enter 
} 
+0

Спасибо. Простое и хорошее решение :) – iskrzycki

+0

Кстати, я помню, как я понял это решение изначально. Я запустил код в отладчике и осмотрел тип объекта, когда я запустил его с помощью мыши и клавиатуры, чтобы запустить кнопку, и увидел, что это разные типы объектов. Если вы используете Enter/Space, вы получаете тип EventArgs, поэтому вы не можете тестировать EventArgs, поскольку MouseEventArgs спускается из EventArgs. –

2

Да, это будет null. потому что EventArgs не KeyEventArgs

KeyEventArgs будет передан в качестве параметра KeyDown или KeyUp событий. Вы запутались.

+0

Кроме того, button3_Click - обработчик событий, подписанный для события Click для класса Button, поэтому это означало, что кнопка нажата, а не нажата –

1

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

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 
} 
+0

Немного беспорядочно, но возможно будет работать :) Спасибо, но @Gary Walker опубликовал, на мой взгляд, лучшее решение – iskrzycki

0

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

0
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
     { 
      if ((keyData & Keys.KeyCode) == Keys.Enter) 
      { 
       SendKeys.Send("{Tab}"); 
       return true; 
      } 
      return false; 
     }