繁体   English   中英

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

[英]inheritance between buttons C# - windows form

我对 C# windows 窗体中的简单原理有疑问。 我有两种表格:FormA 和 FormB。 formA 有 buttonA 按钮和一个 messagebox => MessageBox.Show ("FormA");

FormB 继承自 FormA,它的 buttonA 发生了变化,因此我可以编写另一个消息框 => Console.WriteLine ("FormB");

在那之前没问题,但我需要在按钮 FormA 事件之前运行 FormB 按钮的事件,即:首先MessageBox.Show ("FormB")然后MessageBox.Show ("FormA");

我怎么做?

您可以使用base关键字调用 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
}

但是,为此使用继承似乎很奇怪,也许如果您描述您的问题,我们可以找到比这更好的解决方案。

只需从派生类中的重写事件处理程序调用基类的事件处理程序:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM