Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 停止C中的keydown事件#_C#_Winforms_Event Handling - Fatal编程技术网

C# 停止C中的keydown事件#

C# 停止C中的keydown事件#,c#,winforms,event-handling,C#,Winforms,Event Handling,在我目前的情况下,如何停止按键事件 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; st

在我目前的情况下,如何停止按键事件

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

如您所见-当用户单击按钮时会触发该事件。。但是,在第一次输出之后,如何停止it

e.Handled = true;

根本没有帮助

如果我没搞错,您只想在单击按钮后处理一次按键事件,那么您需要在
MyKeyPress
中注销此处理程序。像这样:

public void MyKeyPress(object sender, KeyEventArgs e)
{
  textBox1.KeyDown -= new KeyEventHandler(MyKeyPress);
  ...
}

如果我答对了,并且您只想在单击按钮后处理一次按键事件,那么您需要在
MyKeyPress
中注销此处理程序。像这样:

public void MyKeyPress(object sender, KeyEventArgs e)
{
  textBox1.KeyDown -= new KeyEventHandler(MyKeyPress);
  ...
}

只需使用PreviewKeyDown事件,而不是KeyDown。;)

只需使用PreviewKeyDown事件,而不必使用KeyDown。;)

根据您对“第一次输出”的说明和应用程序的性质,您需要解开事件处理程序的挂钩,否则每次单击
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; 
} 

根据您对“第一次输出”的说明和应用程序的性质,您需要解开事件处理程序的挂钩,否则每次单击
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; 
} 

“第一个输出”是什么意思?是要删除事件还是…?为什么不使用bool变量?e.Handled=false?或者可以使用e.stop()停止事件;(我认为)没有“取消”的方法。。以及“e.Stop()”。“您所说的“第一次输出”是什么意思?”“您可以从代码中看到文本框显示“按下的键”,因此您的问题的完整答案是:“在文本框中第一次按键输出后”您所说的“第一次输出”是什么意思?”?要删除事件还是…?为什么不使用bool变量?e.Handled=false-或者可以使用e.stop()停止事件;(我认为)没有“取消”的方法。。以及“e.Stop()”。“您所说的“第一次输出”是什么意思?”“您可以从代码中看到文本框显示“按下的键”,因此您的问题的完整答案将是:“在文本框中第一次击键输出之后”,“textBox1.KeyDown-=新的KeyEventHandler(MyKeyPress);”(如建议的JleruOHeP)和“textBox1.KeyDown-=MyKeyPress;“?无论如何,+1代表答案。@Alex-No
-=MyKeyPress
-=newkeypeventhandler(MyKeyPress)
的缩写,它们编译为相同的IL代码。“textBox1.keypdown-=newkeypeventhandler(MyKeyPress)”之间有区别吗;“(如建议的JleruOHeP)和“textBox1.KeyDown-=MyKeyPress;“?无论如何,+1代表答案。@Alex-No
-=MyKeyPress
-=new KeyEventHandler(MyKeyPress)
的缩写,它们编译为相同的IL代码。