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)
}
刚开始研究事件处理程序和委托,如有任何帮助,我们将不胜感激。
请将您的问题帖子一次限制为一个问题。
对于第一个,应该和在基类中声明一样简单class:
protected virtual void button1_Click(object sender, EventArgs e) { }
然后在每个派生的 class 中覆盖它:
protected override void button1_Click(object sender, EventArgs e)
{
// do button stuff here
}
只需在基础 class 本身中为按钮的 Click
事件订阅基础 class 方法。例如:
// Constructor
protected BaseForm()
{
InitializeComponent();
button1.Click += button1_Click;
}
理论上,您应该能够使基本 class 方法成为 abstract
而不是 virtual
,但我不确定 Winforms 设计器将如何适应抽象基本 class 就这样。
与虚拟方法一样,如果您希望基础 class 在单击按钮时也执行某些操作,则需要坚持使用 virtual
,并包含对 base.button1_Click(sender, e);
在派生的 class 实现中。
老实说,我相信网站上已经有一个问题和答案可以解决这个问题,但我一直找不到它。
如果您无法从简单的按钮案例推断出如何处理拖放操作,请将其作为一个单独的问题提出,展示您目前拥有的最小的完整示例,并解释您的具体内容需要帮助。
我有一个 WinForm 应用程序,它有 5 个表单。在主窗体中有三个按钮,每个按钮加载一个设计和布局基本相同的窗体。出于这个原因,我创建了一个基本形式,它们将从中继承。
每个子窗体都有一个 LoadData 按钮,该按钮将从基本窗体继承。我想要做的是在该基本表单上调用该按钮的单击事件,并根据正在使用的子表单执行不同的方法。而不是在每个表单上都有表单特定的点击事件。
所以基本上我想在子窗体中做这样的事情。但我不知道该怎么做。我读到的一切都让我感到困惑。
protected override BaseFormOnClick()
{
LoadDataSet1
}
我也希望能够继承基本窗体上的拖放事件。我猜我需要订阅它,但我似乎无法让它工作。所以像这样。
public DerivedForm() : base()
{
base.Drag_Drop_Event(EventArgs.Empty)
}
刚开始研究事件处理程序和委托,如有任何帮助,我们将不胜感激。
请将您的问题帖子一次限制为一个问题。
对于第一个,应该和在基类中声明一样简单class:
protected virtual void button1_Click(object sender, EventArgs e) { }
然后在每个派生的 class 中覆盖它:
protected override void button1_Click(object sender, EventArgs e)
{
// do button stuff here
}
只需在基础 class 本身中为按钮的 Click
事件订阅基础 class 方法。例如:
// Constructor
protected BaseForm()
{
InitializeComponent();
button1.Click += button1_Click;
}
理论上,您应该能够使基本 class 方法成为 abstract
而不是 virtual
,但我不确定 Winforms 设计器将如何适应抽象基本 class 就这样。
与虚拟方法一样,如果您希望基础 class 在单击按钮时也执行某些操作,则需要坚持使用 virtual
,并包含对 base.button1_Click(sender, e);
在派生的 class 实现中。
老实说,我相信网站上已经有一个问题和答案可以解决这个问题,但我一直找不到它。
如果您无法从简单的按钮案例推断出如何处理拖放操作,请将其作为一个单独的问题提出,展示您目前拥有的最小的完整示例,并解释您的具体内容需要帮助。