主窗体上面有一个toolBar(有新建、保存、删除等按钮)和一个Panel
Panel用于加载各个模块。
因为每个模块要保存的数据不同,因此toolBar的ButtonClick事件也不同现在我在主窗体写好了toolBar的ButtonClick,用使用virtual定义好了,其他模块的窗体继承这个主窗体,然后在用override重写这个ButtonClick方法,但好像不起作用请问应该怎么做
谢谢!

解决方案 »

  1.   

    to 现在我在主窗体写好了toolBar的ButtonClick,用使用virtual定义好了,其他模块的窗体继承这个主窗体,然后在用override重写这个ButtonClick方法,但好像不起作用应该是这样,因为virtual是迟绑定,而事件绑定是早绑定。也就是转化成delegate后,你再做什么多态都无用了
      

  2.   

    一般这种, 我都是放在一个xml文件里面配置,然后专门做一个事件处理方法的类.不同的form或是选中的东西. 事件的委托指向不同的事件处理方法.不过烦的是, 每次都要初始化这个委托链比如如果现在选中的user .那么delete 就是删除user. 如果是product. 删除的就是product
      

  3.   

    使用toolbar的itemclick事件
    在里面写
    if(e.equit(toolbar选项的名字))
    {
    /////激发事件
    }
      

  4.   

    if (e.ClickedItem ==toolbar选项的名字)
    {
                    
    /////激发事件
     }
    刚刚写错了哈
      

  5.   

    事件处理程序去,去调用一个虚函数
    父类这样处理这样处理
    public void m_ToolBar_ButtonClick(object sender,XXXEventArgs e)//记不清这个事件参数的类名了

           int index=this.m_Toolbar.Buttons.IndexOf(e.Button)
           switch(index)
           {
               case 0:
                   this.DoButton0();
                   break;
              default:
              break;
           }
    }
    protected virtual void DoButton0()
    {
           //处理程序
    }
    然后在继承窗口中重写DoButton0方法
      

  6.   

    楼上正解,这个用接口比较合适,先定义一个接口类,里面定义好需要用到的方法,然后不同的模块窗体去实现这个接口,当点击ToorBar时,定义一个接口类的变量去指向Panel中当前的窗体实例,去调用你写好的方法.说白了,就是利用多态.
      

  7.   

    他说的是一个窗口继承,如果是MDI父与子间的关系,解决方法用接口比所所有的子窗口用同一个父类派生子类要好,我一般都是用接口完成这种功能的.因为等你离岗后,说不明什么新人会把一个新建的窗口扔到你的MDI父窗口的MDIChild中,如果父窗口做的检测太少的话,就。。了
      

  8.   

    可能我问题描述得不是很详细,我再说一遍:
    在主窗体有一个ToolBar,上面有新增、保存、删除等按钮,主窗体还有一个Panel控件,其他所有的功能模块都是用户控件,并且都将显示在Panel中
    但不同的模块新增、保存、删除等方法都不一样,怎么样能做到根据Panel中显示的不同模块而使用得TollBar中新增、保存、删除按钮执行不同的方法