我有多个看起来完全相同的表格(发票,价格,订单,......)现在我创建了第一个表单。但在考虑了这一点之后,所有其他形式看起来都完全相同。
是否有技术或其他方法阻止我反复创建所有表单?
答案 0 :(得分:3)
只需创建一个您可以调用for(i=0;i<duplicates.length; i++) {
var request = {
"name": duplicates[i].scope,
"id": 3,
"rules":[
{
"name": duplicates[i].scope + " " + "OP SDR Sync",
"tags": [
{
"tagId": 1,
"variables":[
{
}
],
"condition": false,
},
{
"tagId": 1,
"condition": false,
}
],
"ruleSetId": 3,
}
]
}
request.rules[0].tags[0].variables[0].push({
"variable":"var3",
"matchType": "Regex",
"value": ".*"
});
}
或类似内容的表单类
OrderForm
然后使用它来创建所有控件,并在每次需要向用户显示时创建此类的实例。最重要的是,如果您的某个表单发生了变化(让我们说发票),您可以从您的班级继承而只更改不同的部分:
public class OrderForm : Form {
}
然后在需要时创建public class InvoiceForm : OrderForm {
}
的实例。
我们假设你在InvoiceForm
的构造函数中创建了一堆控件:
OrderForm
现在,如果您要创建OrderForm的实例,无论您创建多少个实例,这些控件都会添加到表单中:
public class OrderForm : Form {
public OrderForm {
var button = new Button() { ... };
var label = new Label () { ... };
this.Controls.Add(button);
this.Controls.Add(label);
}
}
现在,如果您要定义//each of these instances have the same controls
var form1 = new OrderForm();
var form2 = new OrderForm();
var form3 = new OrderForm();
的子类OrderForm
,那么您可以使用与InvoiceForm
相同的表单控件,并对其进行一些更改它:
OrderForm
现在您可以创建public class InvoiceForm : OrderForm {
public InvoiceForm() : base(){ // : base() executes the constructor of the superclass
//all controls in the `OrderForm` class are added because we called base().
var invoiceControl = new Label() { ... };
this.Controls.Add(invoiceControl);
//now in total your form will count 4 controls
}
}
的实例来获取更改后的表单。
InvoiceControl
答案 1 :(得分:2)
创建UserControl,并以多种形式使用它。
答案 2 :(得分:1)
开始使用Visual继承的好地方。
https://msdn.microsoft.com/en-us/library/bx1155fz(v=vs.110).aspx
但是,正如GuidoG上面所说,你可能在Visual Studio和设计师中有一些奇怪的行为。
您可以通过使点击处理程序调用其他可覆盖的Sub然后在继承的表单中覆盖此Sub来处理不同的保存按钮行为(而不是像大多数人那样直接在事件处理程序中编写保存过程:-))
<强>为例强>
public class BaseForm
{
private void SaveButton_Click(System.Object sender, System.EventArgs e)
{
OnSaveButtonClick();
}
protected virtual void OnSaveButtonClick()
{
//Saving process for base form
}
}
public class InheritedForm : BaseForm
{
protected override void OnSaveButtonClick()
{
//Saving process for inherited form
}
}
请记住,&#34; base&#34;表单也适用于没有单词的继承表单。如果你组织得不好,这可能是一个问题。有时候做一个好的旧复制/粘贴会更好。