如果将其名称作为参数传递,我如何在方法中打开表单

本文关键字:方法 表单 参数传递 如果 | 更新日期: 2023-09-27 18:14:16

我试图创建一个标准的方法来打开基于传递给它的参数的表单。基本上,要完成这个任务:

using (Quotes newQte = new Quotes())
{
    newQte.ShowDialog();
}

:

Quotes with a passed parameter, e.g. FormToOpen.

这有可能吗?

如果将其名称作为参数传递,我如何在方法中打开表单

可以使用"工厂方法"来实现。

您将定义FormToOpen这样(我将其重命名为createForm()清晰):

Func<Form> createForm;
所以代码看起来像这样:
private void MakeAndDisplayForm(Func<Form> createForm)
{
    using (var form = createForm())
    {
        form.ShowDialog();
    }
}

你可以这样调用它:

MakeAndDisplayForm(() => new MyForm());

其中MyForm是您希望MakeAndDisplayForm()创建的表单类型。

这种事情很常见;通常将创建者函数传递给类的构造函数。然后,该类稍后使用creator函数来创建它可以使用的东西,而不知道它们是如何创建的。

这是依赖注入的一种形式。

(免责声明:为简洁起见,省略了所有错误检查)

创建一个方法,根据参数创建想要显示的表单:

public static Form CreateAppropriateForm(int formToOpen)
{
    switch (formToOpen) {
        case 0:
            return new Quotes();
        case 1:
            return new Citations();
        case 2:
            return new References();
        default:
            throw new ArgumentException("Invalid parameter value.");
    }
}

其中Quotes, CitationsReferences将是您的表单类,从Form派生。

然后,当您想要显示表单时,您可以调用该方法:

using (Form form = CreateAppropriateForm(2)) {
    form.ShowDialog();
}

这里显示的是值2的示例-但是您可以自由地插入任何其他表达式,以产生可用于表单选择方法的值。

当然,如果适合您的应用程序,您也可以用一种更有意义的方式声明formToOpen。例如,您可以将其声明为自定义enum类型,其中每个enum值表示一个特定的形式。