各位大侠:
我是用VS2008做开发工具
代码如下:
A.定义一个FORM做父类,其中的BUTTON事件如下,
namespace test
public partial class TempForm : Form
{
...
public System.Windows.Forms.Button BtnExcel; public virtual void BtnExcel_Click(object sender, EventArgs e)
{
MessageBox.Show("Parent Calling");
} B。定义一个子表单,并重写方法。
namespace test
public partial class MatCode :TempForm
{
public MatCode()
{
InitializeComponent();
} override public void BtnExcel_Click(object sender, EventArgs e)
{
MessageBox.Show("child calling");
} }
我重测试时为何不能显示Child calling,却总是显示Parenting. 我想要的结果是先显示parent calling
再显示child calling.TKS!
我是用VS2008做开发工具
代码如下:
A.定义一个FORM做父类,其中的BUTTON事件如下,
namespace test
public partial class TempForm : Form
{
...
public System.Windows.Forms.Button BtnExcel; public virtual void BtnExcel_Click(object sender, EventArgs e)
{
MessageBox.Show("Parent Calling");
} B。定义一个子表单,并重写方法。
namespace test
public partial class MatCode :TempForm
{
public MatCode()
{
InitializeComponent();
} override public void BtnExcel_Click(object sender, EventArgs e)
{
MessageBox.Show("child calling");
} }
我重测试时为何不能显示Child calling,却总是显示Parenting. 我想要的结果是先显示parent calling
再显示child calling.TKS!
TempForm tf=new Matcode();
tf.BtnExcel_Click(tf.BtnExcel,new EventArgs());
赞同~ vrhero 仍然强人
父窗体的构造函数中调用了InitializeComponent方法,该方法将窗体上的按钮的点击事件委托给一个虚方法,当子类继承这个窗体时重写该方法,此时初始化组件的方法将事件委托给子窗体的方法(该方法重载了父类的处理方法),这个没有问题。public override void BtnExcel_Click(object sender, EventArgs e) {
base.BtnExcel_Click(sender, e); //先调用父类的方法
MessageBox.Show("child calling");//再执行自己的方法体
}
可以的,楼主没有调用 base.BtnExcel_Click(sender, e); //先调用父类的方法
很奇怪其他人的回复。还有楼主说【却总是显示Parent ing】我也很奇怪,是否使用的也不正确呢?
public void MMSysCode_Click(object sender, EventArgs e)
{
TempForm MatCode = new TempForm();
MatCode.Show();
}
执行结果并没有显示MATCODE,而是显示的TempForm的内容,不知错在那里了。
但是你界面上的按钮的Click事件添加的是BtnExcel_Click()这个函数,你没有办法通过OnClick()方法来调用派生类override之后的BtnExcel_Click()函数,难道这里也能发生多态吗?
这两个单词很像?