按钮C#之间的继承 - 窗体形式

时间:2014-04-25 05:11:59

标签: c# inheritance

我在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");

我该怎么做?

2 个答案:

答案 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());
        }
    }
}