C#如何将方法传递给基本的WinForm按钮单击事件

Posted

技术标签:

【中文标题】C#如何将方法传递给基本的WinForm按钮单击事件【英文标题】:C# How do I pass a method to base WinForm button click event 【发布时间】:2021-09-27 12:42:41 【问题描述】:

我有一个 WinForm 应用程序,它有 5 个表单。从主窗体有三个按钮,每个按钮加载一个具有基本相同设计和布局的窗体。出于这个原因,我创建了一个基本表单,这些表单将从中继承。

每个子表单都有一个 LoadData 按钮,该按钮将从基本表单继承。我要做的是在该基本表单上调用该按钮的单击事件,并根据正在使用的子表单执行不同的方法。而不是在每个表单上都有特定于表单的点击事件。

所以基本上我想在子表单中做这样的事情。但我不知道该怎么做。我读到的一切都让我感到困惑。


protected override BaseFormOnClick()

    LoadDataSet1


我还希望能够继承基本表单上的拖放事件。我猜我需要订阅它,但我似乎无法让它工作。所以像这样。


public DerivedForm() : base()

    base.Drag_Drop_Event(EventArgs.Empty)


刚开始研究事件处理程序和委托,因此非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

请将您的问题帖子一次限制为一个问题。

对于第一个,它应该像在基类中声明一样简单:

protected virtual void button1_Click(object sender, EventArgs e)  

然后在每个派生类中,覆盖它:

protected override void button1_Click(object sender, EventArgs e)

    // do button stuff here

只需订阅基类本身中按钮的Click 事件的基类方法即可。例如:

// Constructor
protected BaseForm()

    InitializeComponent();
    button1.Click += button1_Click;

理论上,您应该能够创建基类方法abstract 而不是virtual,但我不确定 Winforms 设计器能否适应这样的抽象基类。

与虚拟方法一样,如果您希望基类在单击按钮时也执行某些操作,则需要坚持使用virtual,并在派生类实现中包含对base.button1_Click(sender, e); 的调用。

老实说,我相信网站上已经有一个问题可以解决这个问题,但我终其一生都找不到。

如果您在从简单的按钮案例推断如何处理拖放时遇到问题,请将其作为一个单独的问题提出,并展示一个最小、完整的示例来说明您目前所拥有的内容,并解释您具体需要什么帮助与。

【讨论】:

以上是关于C#如何将方法传递给基本的WinForm按钮单击事件的主要内容,如果未能解决你的问题,请参考以下文章

C# winform- 选择卡问题 : 想要通过单击Tabpage A 中的按钮实现 转换到Tabpage B 中,请问如何实现?

C# winform 点击一个按钮退出窗体 并关闭相应的进程

通过 Javascript 将 DatePicker 值传递给 C# 控制器

C# winform程序控件的基本属性1

c# winform如何用一个图片来代替一个窗体的关闭按钮?

C#的winform中如何实现按钮闪烁发光?