创建Windows窗体作为类库

时间:2015-11-19 13:20:32

标签: c# winforms .net-assembly

我试图让windows form在多个项目中重复使用。所以我认为这将是一个类库。我想要做的是将WindowsForm.Show()称为静态调用。我试图创建一个类库但我无法获取图标的资源。然后我创建了一个WinForms项目,但它想要一个新的'在program.cs中。我不想打电话

WindowsForm form = new WindowsForm() 
form.show()

如何创建可重复使用的静态表单?我希望我能说清楚。

2 个答案:

答案 0 :(得分:2)

要添加工厂方法,您可以执行以下操作:

public static MyForm ShowNew()
{
    MyForm form = new MyForm();
    return form;
}

关于资源,取决于您使用的图标。如果图标始终相同且始终如此,则将其添加到库属性/资源中(如果您没有看到它,请转到库项目属性,在选项卡 Resources 上,然后单击“添加”。否则,将一个参数添加到工厂方法(以及表单构造函数)并在调用表单时传递它:

public static MyForm ShowNew(Icon ico)
{
    MyForm form = new MyForm(ico);
    return form;
}

实例化时

MyForm.ShowNew(Properties.Resources.my_icon);

答案 1 :(得分:1)

另一种方法是像往常一样实现表单,将其包装在类似Singleton的类中:

public static class WindowsFormSingleton {

    // A static instance of your form
    private static WindowsForm _form;

    // A singleton property to interact with the form.
    public static WindowsForm Instance
    {
        get
        {
            if(_form == null) {
                this._form = new WindowsForm();
            }
            else if(_form.IsDisposed) {
                this._form = new WindowsForm();
            }

            return this._form;
        }
    }
}

...并使用如下的单例实例:

WindowsFormSingleton.Instance.Show();

注意:正如评论中所述的taffer一样,using a Factory method始终创建新实例将是更好的方法。