我有一个名为 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
{
}
但是我在未找到类型 'mhmm.ScanFolder' 上收到警告构造函数,并且在
Arch2
表单编辑模式下也有错误,我看到调用堆栈错误。所以我尝试了这样的事情:
public partial class Arch2 : ScanFolder
{
public Arch2(MainForm parent, bool[] autoModes, GlobalMethods GMethodsClass)
: base(parent, autoModes, GMethodsClass)
{
}
}
但它仍然是一样的。
正如你所看到的,我显然不知道我在做什么。我想要实现的是让
Arch2
看起来与 ScanFolder
相同,这样我就可以在设计器 View 中看到它,并覆盖一些方法或事件处理程序。 最佳答案
要使用 Forms 设计器,您需要有一个无参数的构造函数:
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/