我在WINFORM中,用了窗口继承来实现界面的整体性!基类窗口中有一个查询按钮,在查询按钮的单击事件中如下:
private void btnSearch_Click(object sender, System.EventArgs e)
{
   GetData();
}
函数一:
GetData()
{
   DataTable df......
}
由于订单与入仓库单的查询是不同的,所以我的订单窗口继承基类窗口,然后重写override GetData()函数,但是我发现点击按钮在订单窗口类中GetData()函数永远都得不到调用,原因是始终调用基类GetData()方法,而不会调用派生类的方法!该问题应该如何实现,用继承的方法可以实现吗?

解决方案 »

  1.   

    不会把 你是不是哪里写错了
    你基类是这么定义的吗 public virtual void GetData()
      

  2.   

    替换的方法,可以用委托来完成,大致如下:
    在基类中定义委托类型
    public delegate void GetDataHandle( ...);定义委托成员在基类中
    protected GetDataHandle myGetData;在基类构造函数中
    myGetData = new GetDataHandle( this.GetData );修改click事件
    myGetData(...);在子类构造函数中做同样的初始化
    myGetData = new GetDataHandle( this.GetData );
      

  3.   

    Knight94(愚翁),厉害,该问题我问了微软的工程师,他们也建议我用其他方法。Knight94(愚翁)的方法也是他们推荐之一,但是他们也说还有其他的方法,叫我查资料!
      

  4.   

    并不复杂:
    参考以下代码。
    运行时显示Form2。执行button的click事件后,显示是50。
    说明使用继承没有问题。
    我想搂主是少了virtual了。    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        protected int a;
            private void button2_Click(object sender, EventArgs e)
            {
                setA();
                Text = a.ToString();
            }
            protected virtual void setA()
            {
                a = 100;
            }
        }    public partial class Form2 : Form1
        {
            public Form2()
            {
                InitializeComponent();
            }        protected override void setA()
            {
                base.setA();
                this.a = 50;
            }
        }