多个完全相同的形式

时间:2016-06-29 10:18:31

标签: c# winforms repeat

我有多个看起来完全相同的表格(发票,价格,订单,......)现在我创建了第一个表单。但在考虑了这一点之后,所有其他形式看起来都完全相同。

是否有技术或其他方法阻止我反复创建所有表单?

3 个答案:

答案 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 { } 的实例。

EDIT在评论中回答OP问题。

我们假设你在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;表单也适用于没有单词的继承表单。如果你组织得不好,这可能是一个问题。有时候做一个好的旧复制/粘贴会更好。