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代码。