将 Winform 定义为抽象不允许编辑派生的 WinForms 的 UI

本文关键字:派生 WinForms UI 编辑 不允许 Winform 定义 抽象 | 更新日期: 2023-09-27 18:33:44

我有一个基本的wform和2个派生的winforms。基本信息包含标签、文本框和保存按钮。每个派生类都包含其他标签和文本框。SaveButton_Click事件正在调用 Save 方法。我在基类中将 Save 方法定义为抽象方法,因此我也将基本 winform 定义为抽象方法。

这是我的代码:

public abstract partial class BaseRowInfo : Form
{
    public BaseRowInfo()
    {
        InitializeComponent();
    }
    private void SaveButton_Click(object sender, EventArgs e)
    {
        Save();
    }
    protected abstract void Save();
}
public partial class EditableRowInfoFrm : BaseRowInfo
{
    public EditableRowInfoFrm():base()
    {
        InitializeComponent();            
    }
    protected override void Save()
    {
        // TODO
    }
}
public partial class ReadOnlyRowInfoFrm : BaseRowInfo
{
    public ReadOnlyRowInfoFrm ():base()
    {
        InitializeComponent();            
    }
    protected override void Save()
    {
        // TODO
    }
}

一旦我将基类定义为抽象,我就无法再编辑派生表单的 UI。我将基类定义为抽象的事实是否错误?如果可以将其定义为抽象,解决方案是什么?

将 Winform 定义为抽象不允许编辑派生的 WinForms 的 UI

不,你的方法没有错。Visual Studio IDE只是不喜欢你在编辑器中使用抽象类。

我可以从微软的角度来看,这很难实现。您可能会从基类更改某些内容。我不确定他们将如何实现一个以体面的方式工作的设计器。

有两种选择:

    为每个
  • 派生类手动编写 UI 代码;
  • 添加一个控件,可能实现用于通信的通用接口,您可以将其添加到派生窗体中。可以使用设计器创建该控件。

如果您希望能够编辑派生类中抽象类的 UI 控件,请使用"受保护"访问修饰符而不是"private"标记这些控件。