我在WINFORM中,用了窗口继承来实现界面的整体性!基类窗口中有一个查询按钮,在查询按钮的单击事件中如下:
private void btnSearch_Click(object sender, System.EventArgs e)
{
GetData();
}
函数一:
GetData()
{
DataTable df......
}
由于订单与入仓库单的查询是不同的,所以我的订单窗口继承基类窗口,然后重写override GetData()函数,但是我发现点击按钮在订单窗口类中GetData()函数永远都得不到调用,原因是始终调用基类GetData()方法,而不会调用派生类的方法!该问题应该如何实现,用继承的方法可以实现吗?
private void btnSearch_Click(object sender, System.EventArgs e)
{
GetData();
}
函数一:
GetData()
{
DataTable df......
}
由于订单与入仓库单的查询是不同的,所以我的订单窗口继承基类窗口,然后重写override GetData()函数,但是我发现点击按钮在订单窗口类中GetData()函数永远都得不到调用,原因是始终调用基类GetData()方法,而不会调用派生类的方法!该问题应该如何实现,用继承的方法可以实现吗?
你基类是这么定义的吗 public virtual void GetData()
在基类中定义委托类型
public delegate void GetDataHandle( ...);定义委托成员在基类中
protected GetDataHandle myGetData;在基类构造函数中
myGetData = new GetDataHandle( this.GetData );修改click事件
myGetData(...);在子类构造函数中做同样的初始化
myGetData = new GetDataHandle( this.GetData );
参考以下代码。
运行时显示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;
}
}