在C#中停止keydown事件

时间:2012-08-21 12:03:44

标签: c# winforms event-handling

如何在当前情况下停止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;
}

enter image description here

正如您所看到的 - 当用户点击某个按钮时会触发该事件..但是如何在第一次输出后停止该事件?

e.Handled = true;

根本没有帮助

3 个答案:

答案 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; 
}