как не допускать множественные нажатия клавиш на одно нажатие клавиши?

когда мы нажимаем клавишу и продолжаем нажимать на нее, непрерывно срабатывает событие нажатия и нажатия клавиши. Есть ли способ разрешить этот огонь только после полного цикла, например, с помощью клавиш, а затем с клавиатуры.

Я бы хотел, чтобы пользователь не мог нажимать клавишу непрерывно, а хотелось бы, чтобы пользователь нажал, а затем отпустил клавиатуру, чтобы набрать символ!

так что следующий случай не возникает, например: pppppppppppppppppppppppp, когда пользователь нажимает «p» в течение 1 секунды.

isKeyDown boolean isKeyDown , в событии KeyDown , установите для boolean значение true. В событии KeyUp установите для boolean значение false.

Это пример кода

 bool isKeyDown=false; public void control_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if(isKeyDown) return; isKeyDown=true; // do what you want to do } public void control1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { isKeyDown=false; // do you key up event, if any. } 

Вы можете сделать это в масштабе всего приложения, отфильтровывая сообщения с ключом с помощью IMessageFilter. Вот пример:

  public partial class Form1 : Form, IMessageFilter { public Form1() { InitializeComponent(); Application.AddMessageFilter(this); this.FormClosed += (s, e) => Application.RemoveMessageFilter(this); } private Keys mLastKey = Keys.None; public bool PreFilterMessage(ref Message m) { if (m.Msg == 0x100 || m.Msg == 0x104) { // Detect WM_KEYDOWN, WM_SYSKEYDOWN Keys key = (Keys)m.WParam.ToInt32(); if (key != Keys.Control && key != Keys.Shift && key != Keys.Alt) { if (key == mLastKey) return true; mLastKey = key; } } else if (m.Msg == 0x101 || m.Msg == 0x105) { // Detect WM_UP, WM_SYSKEYUP Keys key = (Keys)m.WParam.ToInt32(); if (key == mLastKey) mLastKey = Keys.None; } return false; } } 

Одна вещь, которую я преследовал, – это количество повторений в сообщении WM_KEYDOWN. Как ни странно, это не работало на моей машине, это было 1 для повторения ключей. Не знаю, почему.

Чтобы предотвратить многократное нажатие клавиши при удержании: вы должны использовать свойство SuppressKeyPress следующим образом:

 bool isKeyRepeating = false; public void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if (isKeyRepeating) { e.SuppressKeyPress = true; } else { isKeyRepeating = true; } } public void textBox1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { isKeyRepeating = false; } 

См.: KeyEventArgs .. ::. Обработано свойство … и … KeyEventArgs .. ::. SuppressKeyPress Property …. для соответствующей информации