winforms C#如何传递一个方法到基础WinForm按钮单击事件

cgh8pdjw  于 2023-04-21  发布在  C#
关注(0)|答案(2)|浏览(175)

我有一个WinForm应用程序,它有5个窗体。从主窗体中有三个按钮,每个按钮加载一个具有基本相同设计和布局的窗体。为此,我创建了一个基本窗体,这些窗体将继承。
每个子窗体都将有一个LoadData按钮,该按钮将从基窗体继承。我试图做的是在该基窗体上调用该按钮的click事件,并根据正在使用的子窗体执行不同的方法。而不是在每个窗体上都有特定于窗体的click事件。
所以本质上我想在儿童形态中做一些类似的事情。但我不知道怎么做。我读到的所有东西都让我困惑。

protected override BaseFormOnClick()
{
    LoadDataSet1
}

我也希望能够继承拖放事件,这是在基础形式。我猜我需要订阅它,但我似乎不能得到它的工作。所以这样的东西。

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

刚刚开始看事件处理程序和委托,所以任何帮助都将不胜感激。

nc1teljy

nc1teljy1#

请将您的问题帖子限制为一次一个问题。
对于第一个,它应该像在基类中声明一样简单:

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);的调用。
老实说,我相信有一个问题的答案已经在网站上,解决这个问题,但我的生活,我找不到它。
如果你在从简单的按钮案例推断如何处理拖放操作时遇到困难,请将其作为一个单独的问题提出,展示一个最小的、完整的例子,说明你目前为止所拥有的,并解释你具体需要帮助的地方。

xqk2d5yq

xqk2d5yq2#

BaseForm:

private void btnOk_Click(object sender, EventArgs e)
{
    SaveUpdates();
}
public virtual void SaveUpdates()
{
}

ChildForm:
public override void SaveUpdates()
{
    MessageBox.Show("Save items");
}

相关问题