我在C#windows窗体中有一个疑问简单的原则。
我有两种形式:FormA和FormB。
formA有buttonA按钮,其中一个messagebox => MessageBox.Show ("FormA");
FormB继承自FormA,其buttonA已更改,因此我可以编写另一个messagebox => Console.WriteLine ("FormB");
在那之前可以,但是我需要FormB按钮的事件在按钮FormA事件之前运行,即:首先MessageBox.Show ("FormB")
然后MessageBox.Show ("FormA");
我该怎么做?
答案 0 :(得分:1)
您可以使用base
关键字调用基本方法。
让我们假设你有一个继承自FormA的FormB,并且你已经覆盖了Button1Click方法:
public override void Button1Click(object sender, EventArgs e)
{
// execute the base class code first
base.Button1Click(sender, e);
// call your code specific for B
}
然而,使用继承这看起来很奇怪,也许如果你描述你的问题,我们可以找到比这更好的解决方案。
答案 1 :(得分:0)
只需从派生类中的重写事件处理程序调用基类的事件处理程序:
using System;
using System.Windows.Forms;
namespace TestApp
{
public class FormA : Form
{
private readonly Button buttonA;
public virtual void ButtonAClick(object sender, EventArgs e)
{
MessageBox.Show("FormA");
}
public FormA()
{
this.buttonA = new Button()
{
Text = "buttonA",
Top = 10,
Left = 10
};
this.buttonA.Click += ButtonAClick;
this.Controls.Add(buttonA);
}
}
public class FormB : FormA
{
public override void ButtonAClick(object sender, EventArgs e)
{
MessageBox.Show("FormB");
base.ButtonAClick(sender, e);
}
}
class Program
{
public static void Main(string[] args)
{
Application.Run(new FormB());
}
}
}