如何在当前情况下停止keydown事件?
private void button1_Click(object sender, EventArgs e)
{
textBox1.Focus();
textBox1.KeyDown += new KeyEventHandler(MyKeyPress);
}
public void MyKeyPress(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
string first = e.Modifiers.ToString();
if (first != "None")
{
if ((e.KeyCode != Keys.ShiftKey) && (e.KeyCode != Keys.Alt) && (e.KeyCode != Keys.ControlKey))
{
textBox1.Text = e.Modifiers.ToString() + " & " + e.KeyCode.ToString();
}
}
else
{
textBox1.Text = e.KeyCode.ToString();
}
e.Handled = true;
}
正如您所看到的 - 当用户点击某个按钮时会触发该事件..但是如何在第一次输出后停止该事件?
e.Handled = true;
根本没有帮助
答案 0 :(得分:3)
如果我找到你并且你想在点击按钮后只处理一次KeyPress事件,那么你需要在MyKeyPress
中取消注册这个处理程序。像这样:
public void MyKeyPress(object sender, KeyEventArgs e)
{
textBox1.KeyDown -= new KeyEventHandler(MyKeyPress);
...
}
答案 1 :(得分:1)
只使用PreviewKeyDown事件而不是KeyDown。 ;)
答案 2 :(得分:1)
根据您对" 第一个输出"的澄清以及取消事件处理程序所需的应用程序的性质,否则每次单击Capture
按钮时,您将分配另一个委托。
public void MyKeyPress(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
string first = e.Modifiers.ToString();
if (first != "None")
{
if ((e.KeyCode != Keys.ShiftKey) && (e.KeyCode != Keys.Alt) && (e.KeyCode != Keys.ControlKey))
{
textBox1.Text = e.Modifiers.ToString() + " & " + e.KeyCode.ToString();
textBox1.KeyDown -= MyKeyPress;
}
}
else
{
textBox1.Text = e.KeyCode.ToString();
textBox1.KeyDown -= MyKeyPress;
}
e.Handled = true;
}