按钮的Click事件执行2次的问题!

leisa 2005-09-08 07:35:30
假设有窗体类A,A上有一个按钮"OK"(btnOK),当单击"OK"按钮后,触发Click事件。
public virtual btnOK_Click(object sender, System.EventArgs e)
{
......
}

假设有窗体类B,B从A继承而来,但是B的"OK"按钮重载了A的方法。
public override btnOK_Click(object sender, System.EventArgs e)
{
......
}

现在出现的问题是,当我单击B的"OK"按钮时,Click事件会执行两次,这是怎么回事?
...全文
423 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chongchong2008 2005-09-09
  • 打赏
  • 举报
回复

冲写的时候把base.btnOK_Click() ;去掉
linfengcyl 2005-09-09
  • 打赏
  • 举报
回复
那就是btnOK.Click+=......写了两次。
leisa 2005-09-09
  • 打赏
  • 举报
回复
我已经把base.btnOK_Click()去掉了。
我补充一点当我单击B的"OK"按钮时,是B自己的"OK"按钮Click事件会执行两次。
更加奇怪的是,我在B的Click中有这样一句代码:this.Disposal(),B把自己给注销了
但是还是可以再执行一次。
lljfl 2005-09-09
  • 打赏
  • 举报
回复
你在A中有btnOK.Click+=......会不会你在B中又有btnOK.Click+=......,这样就会有两次哦
JasonHeung 2005-09-09
  • 打赏
  • 举报
回复
假设有窗体类A,A上有一个按钮"OK"(btnOK),当单击"OK"按钮后,触发Click事件。
public virtual btnOK_Click(object sender, System.EventArgs e)
{
......
}

假设有窗体类B,B从A继承而来,但是B的"OK"按钮重载了A的方法。
public override btnOK_Click(object sender, System.EventArgs e)
{
......
}

按钮事件不需要加virtual。

3tzjq 2005-09-09
  • 打赏
  • 举报
回复
没加 void
3tzjq 2005-09-09
  • 打赏
  • 举报
回复
btnOK_Click应该为private,而不是在派生类中暴露btnOK_Click处理。
private btnOK_Click(object sender, System.EventArgs e)
{
this.OK();
}

public virtual OK()//在派生类中只需要重写此方法。
{
this.DialogResult = DialogResult.OK;
}

派生类B:
public override OK()
{
MessageBox.Show("已重写OK方法!");
base.OK();//不需要就注释掉
}
lovvver 2005-09-09
  • 打赏
  • 举报
回复
应该是不可能的,你重新试一遍看看。最好能把你的代码贴出来看看就知道了。
窗体A的btnOK_Click既然是虚方法,那就没必要实现了(写了也无用)。
还有:
public virtual btnOK_Click(object sender, System.EventArgs e)->
public virtual void btnOK_Click(object sender, System.EventArgs e)
另外一个也一样。
leisa 2005-09-09
  • 打赏
  • 举报
回复
肯定不是。我仔细检查过了,没有把btnOK.Click+=......写了两次。
linfengcyl 2005-09-08
  • 打赏
  • 举报
回复
写了base.XXX?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧