如果将其名称作为参数传递,我如何在方法中打开表单
本文关键字:方法 表单 参数传递 如果 | 更新日期: 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
, Citations
和References
将是您的表单类,从Form
派生。
然后,当您想要显示表单时,您可以调用该方法:
using (Form form = CreateAppropriateForm(2)) {
form.ShowDialog();
}
这里显示的是值2
的示例-但是您可以自由地插入任何其他表达式,以产生可用于表单选择方法的值。
formToOpen
。例如,您可以将其声明为自定义enum
类型,其中每个enum
值表示一个特定的形式。