从具有参数的“Form”inheritance
我有一个名为ScanFolder
的表单,我需要另一个表单,它需要与ScanFolder
非常相似,所以我决定使用表单inheritance 。 但是构造函数似乎存在一些误解。
ScanFolder
看起来像:
public partial class ScanFolder : Form { public ScanFolder(MainForm parent, bool[] autoModes, GlobalMethods GMethodsClass) { //Doing something with parameters } }
我试图像这样inheritanceForm
:
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
相同,所以我可以在设计器视图中看到它并覆盖一些方法或事件处理程序。
要使用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 } }
或者,如果你真的需要一些init参数,你可以反过来做:
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 } }
我推荐第一种方法,否则你需要传递一些合理的默认参数(我不建议传递一个null参数)。
在某些情况下,您似乎还必须在更改类后重新启动Visual Studio。
您可以在父表单中使用此代码:
public partial class ScanFolder : Form { public ScanFolder(MainForm parent, bool[] autoModes, GlobalMethods GMethodsClass) { //doing something with parameters } }
然后以子forms:
public partial class ScanFolder : Form { public ScanFolder(MainForm parent, bool[] autoModes, GlobalMethods GMethodsClass) : base(parent,autoModes,GMethodsClass) { //doing something with parameters } }