如果将其名称作为参数传递,如何在方法中打开表单
我正在尝试创建一个标准方法来打开基于传递给它的参数的表单。 基本上,要完成这项工作:
using (Quotes newQte = new Quotes()) { newQte.ShowDialog(); }
通过替换:
Quotes with a passed parameter, eg FormToOpen.
这是可能吗?
可以使用“ 工厂方法 ”来执行此操作。
您可以像这样定义FormToOpen createForm()
为了清楚起见,我将它重命名为createForm()
):
Func
所以代码看起来像这样:
private void MakeAndDisplayForm(Func
你会这样称呼它:
MakeAndDisplayForm(() => new MyForm());
MyForm
是您希望MakeAndDisplayForm()
创建的表单类型。
做这种事情是相当普遍的; 通常将创建者函数传递给类的构造函数。 然后,该类稍后使用创建函数来创建它可以使用的东西,而不知道它们是如何创建的。
这是Depencency Injection的一种forms。
( 免责声明:所有错误检查都是为了简洁而省略 )
根据参数创建一个创建要显示的表单的方法:
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
值表示特定forms。