c# - 从具有参数的 'Form' 继承

标签 c# .net winforms inheritance constructor

我有一个名为 ScanFolder 的表单,我需要另一个表单,它需要与 ScanFolder 非常相似,所以我决定使用 form inheritance .但是好像对构造函数有些误解。

ScanFolder 看起来像:

public partial class ScanFolder : Form
{
    public ScanFolder(MainForm parent, bool[] autoModes, GlobalMethods GMethodsClass)
    {
        //Doing something with parameters
    }
}

我试图像这样继承 Form:

public partial class Arch2 : ScanFolder
{
}

但我收到警告 Constructor on type 'mhmm.ScanFolder' not found,而且 Arch2 Form 编辑模式也有错误,我在其中看到调用堆栈错误。

所以我尝试了这样的事情:

public partial class Arch2 : ScanFolder
{
    public Arch2(MainForm parent, bool[] autoModes, GlobalMethods GMethodsClass)
        : base(parent, autoModes, GMethodsClass)
    {
    }
}

但还是一样。

如您所见,我显然不知道自己在做什么。我想要实现的目标是让 Arch2 看起来与 ScanFolder 一样,这样我就可以在设计器 View 中看到它并重写一些方法或事件处理程序。

最佳答案

要使用表单设计器,您需要有一个无参数的构造函数:

public partial class ScanFolder : Form
{
    public ScanFolder()
    {
         InitializeComponent(); // added by VS
    }

    public ScanFolder(MainForm parent, bool[] autoModes, GlobalMethods gm)
       : this() // <-- important
    {
         // don't forget to call the parameterless ctor in each
         // of your ctor overloads
    }
}

或者,如果你真的需要一些初始化参数,你可以反过来做:

public partial class ScanFolder : Form
{
    public ScanFolder()
        : this(null, new bool[0], new GlobalMethods())
    {

    }

    public ScanFolder(MainForm parent, bool[] autoModes, GlobalMethods gm)
    {
        InitializeComponent(); // added by VS
        // other stuff
    }
}

我推荐第一种方式,否则你需要传递一些合理的默认参数(我不推荐传递空参数)。

似乎在某些情况下,您还必须在更改类后重新启动 Visual Studio。

关于c# - 从具有参数的 'Form' 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5729015/

相关文章:

C# Windows 窗体 - MenuItem 单击事件 - 获取 MenuItem 文本

javascript - 如何在JQuery中获取UserControl中特定控件的Id

javascript - 页面加载后是否可以在 Page_Load 范围内填充空对象列表?

c# - Parallel.ForEach 缺少的项目

.net - 表达式树 : invoking a method with out or ref arguments

C# 查找套接字 ID?

c# - 在 32 位机器上部署 64 位 C# winform 应用程序

c# - 获取错误作为对象处置异常

c# - 如何创建与当前视觉风格相匹配的颜色?

.net - 通过 Asp.Net MVC 中的操作提供文件。使用 byte[] 还是 Stream 更好?