假设有窗体类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事件会执行两次,这是怎么回事?

解决方案 »

  1.   


    冲写的时候把base.btnOK_Click() ;去掉
      

  2.   

    我已经把base.btnOK_Click()去掉了。
    我补充一点当我单击B的"OK"按钮时,是B自己的"OK"按钮Click事件会执行两次。
    更加奇怪的是,我在B的Click中有这样一句代码:this.Disposal(),B把自己给注销了
    但是还是可以再执行一次。
      

  3.   

    那就是btnOK.Click+=......写了两次。
      

  4.   

    肯定不是。我仔细检查过了,没有把btnOK.Click+=......写了两次。
      

  5.   

    应该是不可能的,你重新试一遍看看。最好能把你的代码贴出来看看就知道了。
    窗体A的btnOK_Click既然是虚方法,那就没必要实现了(写了也无用)。
    还有:
    public virtual btnOK_Click(object sender, System.EventArgs e)->
    public virtual void btnOK_Click(object sender, System.EventArgs e)
    另外一个也一样。
      

  6.   

    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();//不需要就注释掉
    }
      

  7.   

    假设有窗体类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。
      

  8.   

    你在A中有btnOK.Click+=......会不会你在B中又有btnOK.Click+=......,这样就会有两次哦