![](/img/trans.png)
[英]How can I prevent the keydown event of a form in C# from firing more than once?
[英]How do I restrict events firing more than once at a time
由于我没有太多的信誉来发布图像,我正在阐述一个大问题。
我有三种窗体形式,每次创建窗体时,事件的执行都会增加。
1. Form1 (MainForm)
在这里,我调用包含用户控件的第二种形式(SubForm)。
2. Form2 (SubForm)
在这里,我通过单击用户控件来调用第二个表单(ChildForm)。
3. Form3 (ChildForm)
它包含一个OK按钮。
这是我的问题。
这是第一种形式的代码(MainForm)
private void button1_Click(object sender, EventArgs e)
{
SubForm obj = new SubForm ();
obj.ShowDialog();
}
这是包含用户控件的第二种形式(SubForm)的代码
// Event generation
UserControl1.MouseUp += new EventHandler(this.Node_Click);
// Event that calls the ChildForm
private void Node_Click(object sender, EventArgs e)
{
ChildForm obj = new ChildForm();
obj.ShowDialog();
}
这是第一种形式的代码(MainForm)
private void btnOK_Click(object sender, EventArgs e)
{
this.Close();
}
谁知道为什么会这样?
嘿,我不确定发生了什么,但如果你想只应用node_click一次只是声明一个bool var canEnter = true; 并做到这一点
private void Node_Click(object sender, EventArgs e) {
if(canEnter) {
ChildForm obj = new ChildForm();
obj.ShowDialog();
canEnter=false;
}
}
并为子表单(关闭事件)创建事件并在其中放置canEnter = true; 如果我找对你,我想这就是你需要做的:)
由于您正在调用UserControl1.MouseUp
,我认为您已将事件声明为static
。 因此,即使您关闭第二个表单(保持第一个表单未闭合),该事件也不会被清除。 为此,您需要Unsubscribe
该活动。
使用第二种形式的Form_Closing
事件Unsubscribe
事件。
private void SubForm_FormClosing(object sender, FormClosingEventArgs e)
{
UserControl1.MouseUp -= new EventHandler(this.Node_Click);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.