每一个继承自frmBase的新窗体,都必须实现那几个方法  那就用接口

解决方案 »

  1.   

    得同时继承父类,实现接口吧;public partial class FormBase : Form
       {
       }interface InterfaceTest
        {
            void Add();
            void Delete();
        }
    public partial class frmUser : frmBase,InterfaceTest
    {
        //都实现了这几个方法
        public  void Add()
        {  
            //xxx
        }
        //***
    }
      

  2.   

    参考1 父类定义一个虚函数(virtual), 在单击的时候调用虚函数, 而在子类可以用 override 重新定义这个虚函数
    2 父类定义一个事件 event, 在单击的时候判断如果事件未赋值, 则调用自己的方法, 否则调用此事件, 子类中将事件赋值为新的函数
      

  3.   

    如果frmBase没有什么公共样式,可以不用继承frmBase,直接实现接口就可以了的。
      

  4.   

    public interface IForm
    {
        void Add();
        //***
    }
    public partial class frmBase : Form,IForm
    {
        public void Add()    {    }
    }然后新窗体继承后,也没提示要实现接口啊
    public partial class frmChild : frmBase
    {    
    }
    而且,新窗体再继承接口,也没提示要实现。。
    public partial class frmChild : frmBase,IForm
    {    
    }
      

  5.   

    frmBase窗体也要有这些方法
      

  6.   

    我现在用的就是virtual关键字,但是这个如果子窗体不重写也不会报错
    可能我的强迫症吧,我想每继承出一个新窗体后,都会提示我必须要实现这些方法。
      

  7.   

    我现在用的就是virtual关键字,但是这个如果子窗体不重写也不会报错
    可能我的强迫症吧,我想每继承出一个新窗体后,都会提示我必须要实现这些方法。那就给子类再加个接口咯。这样子类就需要实现接口。
      

  8.   

    编程方式创建继承窗体
    public partial class Frm_Main : Form//表示当前的窗体继承于Form类
        {
            public Frm_Main()
            {
                InitializeComponent();
            }
    }
    Frm_Inherit窗体修改后的代码如下;
    public partial class Frm_Inherit : Frm_Main//继承自基窗体
        {
            public Frm_Inherit()
            {
                InitializeComponent();
            }
        }
      

  9.   

    看看这两篇文章:
    Designing Windows Forms with Abstract Inheritance
    http://www.steveandrews.me/blog/2008/01/05/designing-windows-forms-with-abstract-inheritanceInheriting a Form from an Abstract Class (and Making it Work in the Designer)
    http://www.codeproject.com/Articles/22788/Inheriting-a-Form-from-an-Abstract-Class-and-Makin
      

  10.   

    public interface IForm
    {
        void Add();
        //***
    }
    public partial class frmBase : Form,IForm
    {
        public void Add()    {    }
    }然后新窗体继承后,也没提示要实现接口啊
    public partial class frmChild : frmBase
    {    
    }
    而且,新窗体再继承接口,也没提示要实现。。
    public partial class frmChild : frmBase,IForm
    {    
    }
    frmBase类不要再去继承接口,frmChild类直接继承frmBase和IForm就会有提示你要去实现了;
    因为你基类和子类同时都继承了同一个接口,基类肯定有该接口的实现的,子类再去继承基类的时候子类已经把基类实现接口的方法都给继承下来,这时子类已经有了该接口的实现,所以IDE没有提示实现并且不报错是正常的。
      

  11.   

    我在frmBase的刷新按钮里,写了类似这样的一段代码
    //t是DataTable
    t = getData();
    //绑定到listview里面
    bind();
    然后我想要子窗体全都要实现各自的getData()首先frmBase里面必须要有getData的吧
    于是就是,子窗体就算继承了接口,因为frmBase已经有了getData,所以也没有提示要实现
      

  12.   

    frmBase里为什么必须要有getData?除非你这个是一个公共方法,子窗体继承后直接就想用
    既然你不想子窗体直接用,而是要全部重写,你模板里写个方法是要闹哪样,写了也永远不会执行.
      

  13.   

    你应该在接口中定义getData,然后让子窗体各自去实现
      

  14.   


    这是frmBase里的刷新按钮的代码
    public virtual DataTable GetData() { return null; }
    //刷新数据
    private void toolStripButton4_Click(object sender, EventArgs e)
    {
        DataTable t = GetData();
        //绑定到listview
        bind(t);
        //编辑和删除按钮在有选中项之前均不可用
        tsbEdit.Enabled = false;
        tsbDelete.Enabled = false;
    }
    然后子窗体只要重写一下getData就能显示各自的数据了,就不需要再写刷新按钮的事件处理了。