使用方法 class 构造函数 C# 创建表单

Create Form with method class constructor C#

我有一个 class 方法 NewForm 下面:

class cFormInteraction
{
    public static void NewForm(Form fm)
    {
        if (fm is null)
        {
            fm = new Form();
            fm.Show();
        }
    }
}

formMain 中,我想创建我想要的表单,代码如下:

public static FormWantToShow FW;  
private void button1_Click(object sender, EventArgs e)
    {
        cFormInteraction.NewForm(FW);
    }

我要解决的问题:

if (fm is null)
        {
            fm = new Form(); // -> How i make the program understand and new the form i transmisson in.
            fm.Show();
        }

假设您要显示的每个表单都有一个无参数构造函数,您可以通过带有 ref 参数的通用方法来实现。

泛型方面允许 NewForm 方法知道要创建什么表单类型,ref 参数允许调用代码存储对新创建表单的引用以存储在一个字段。

static class FormInteraction
{
    public static void NewForm<T>(ref T fm)
        where T : Form, new()
    {
        if (fm is null)
        {
            fm = new T();
            fm.Show();
        }
    }
}

然后在调用代码中:

public static FormWantToShow form;  
private void button1_Click(object sender, EventArgs e)
{
    FormInteraction.NewForm(ref form);
}

(我更改了名称以遵循正常的 C# 命名约定。)

在我看来,在 NewForm 方法中进行 null 检查有点令人费解。

该方法的名称是 NewForm 似乎也很奇怪,但实际上它可能不会创建表单。

奇怪的是它也显示了表格,但名称中没有。

那么在我看来,代码应该是这样的:

static class FormInteraction
{
    public static T NewAndShowForm<T>()
        where T : Form, new()
    {
        var fm = new T();
        fm.Show();
        return fm;
    }
}

那么你可以这样称呼它:

public static FormWantToShow form;
private void button1_Click(object sender, EventArgs e)
{
    if (form != null)
    {
        form = FormInteraction.NewAndShowForm<FormWantToShow>();
    }
}