繁体   English   中英

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

[英]C# How do I pass a method to base WinForm button click event

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

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

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


protected override BaseFormOnClick()
{
    LoadDataSet1
}

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


public DerivedForm() : base()
{
    base.Drag_Drop_Event(EventArgs.Empty)
}

刚刚开始研究事件处理程序和委托,因此将不胜感激任何帮助。

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

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

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 Designer 将如何适应这样的抽象基类。

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

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

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

暂无
暂无

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

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