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

我正在尝试创建一个标准方法来打开基于传递给它的参数的表单。 基本上,要完成这项工作:

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

通过替换:

 Quotes with a passed parameter, eg FormToOpen. 

这是可能吗?

可以使用“ 工厂方法 ”来执行此操作。

您可以像这样定义FormToOpen createForm()为了清楚起见,我将它重命名为createForm() ):

 Func
createForm;

所以代码看起来像这样:

 private void MakeAndDisplayForm(Func
createForm) { using (var form = createForm()) { form.ShowDialog(); } }

你会这样称呼它:

 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."); } } 

QuotesCitationsReferences将是您的表单类,派生自Form

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

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

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

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