怎么没法控制,新建窗体继承自模板窗体,双击新窗体的确定按钮,代码中不要执行base窗体的代码

解决方案 »

  1.   

    首先你要在baseform中定义清楚两个按钮的行为,在子类中尽量不要重写它们的行为。如果实在是无法预先定义,你可以定义两个可重写方法,例如public virtual void OnOkClicked()
    {
    }public virtual void OnCancelClicked()
    {
    } 然后在子类中再去重写。但是要知道,编程当然要尽量少写代码、尽量少定义class。实际上之所以需要“面向对象设计”,是因为我们确实需要它。因此将来你会发现目前这种(想出的内容还很)贫乏地进行继承,实际上繁琐和多余的。你应该长远一点研究出窗体的业务行为,然后才进行抽象。不能刚有一丁点概念就滥用继承。
      

  2.   


    已经更你说过了,点击按钮的事件处理是在baseform中完成的,根本不是在“新窗体”中。你首先要搞明白,代码应该在哪里写。
      

  3.   

    假设你的 Form 叫 OkCancelDialogForm,两个 Button 叫 btnOK, btnCancel。
    首先,就像楼上各位所说的一样,你的按钮的 Click 事件触发操作是在 OkCancelDialogForm 内部暗箱作业的,跟外部没有关系,外部只是在 OkCancelDialogForm 暴露出的对外的 Event 上挂载对应的方法从而得到相应的执行。
    你想想,你平时随便拖个按钮然后绑定一个 Click 事件不都是这样的吗?至于怎么去触发 Click Event,由你外部控制吗?不是的。// 先要在外部定义
    public event EventHandler OkClick, CancelClick;// 构造函数中
    btnOK.Click += (sender, eventargs) => 
    {
        OnOkClick();
    }
    btnCancel.Click += (sender, eventargs) => 
    {
        OnCancelClick();
    }// 类方法
    public virtual void OnOkClick()
    {
        if (OkClick != null) OkClick();
    }
    public virtual void OnCancelClick()
    {
        if (CancelClick != null) CancelClick();
    }
      

  4.   

    最简单的
    (this.Controls["button1"] as Button).PerformClick();
      

  5.   

    如果定义事件,那么其实你就无需把两个方法声明为virtual的。(也就是说,可以禁止重写。这样才能保证事件触发行为可靠地维系到子类中)但是这样,实际上子类对象需要注册监听自己的两个事件,这在概念上是“沉重”的。不如删除两个事件只留两个“空的”方法允许子类去重写,更轻更明确。
      

  6.   


    lz应该是想在子类中写 button_click 事件处理方法,而不是触发。