在 Visual Studio 中设计通用表单

Posted

技术标签:

【中文标题】在 Visual Studio 中设计通用表单【英文标题】:Designing a Generic Form in Visual Studio 【发布时间】:2014-01-21 17:41:03 【问题描述】:

我有大约 6 个类都继承自同一个基类。我正在制作一个用户界面以允许用户编辑这些类,然后将它们保存到数据库中。如果我只能使用泛型,我可以让所有代码都能正常工作。

一旦我尝试使表单通用,就会出现一些严重的问题。我已经阅读了一些解决方案,例如:http://social.msdn.microsoft.com/Forums/windows/en-US/afdfce40-8d7a-4300-bd8d-26e18c320a71/designer-error-with-descendant-of-generic-form?forum=winformsdesigner,但它们似乎并没有真正起作用。所有这一切都是为了给我一个设计好的表单 - 但不能与泛型一起使用,以及一个带有泛型的空表单类,它继承自。

我需要一个可以在设计器中编辑的表单,并在我的程序中使用泛型类型进行构造,它维护了设计器中的所有设计和代码。

有人对此有有效的解决方案吗?

【问题讨论】:

您是否尝试过将基类作为参数传递给表单的构造函数?这应该允许您将继承的类传递给表单。但是,如果我没记错的话,只有基类属性会暴露给表单。如果您不希望对继承的类进行太多更改,则可以使用枚举和选择块将类转换为继承的类型。 Does anyone have a working solution for this? - 是的,它叫做WPF。 hmm - 也许您将不得不创建一个通用代理对象,然后从它们中多次初始化表单实例......手动将泛型中的属性写入表单......但这远非有趣. 【参考方案1】:

事实证明,我链接的文章中显示的解决方案是正确的,但只是令人困惑。

我想我会发布我的答案来帮助可能遇到此问题的其他人。

场景: 你有一个表单,你需要能够与泛型一起使用(即传入一个类型以用于一些特殊的事情)。这样做的主要好处是使用设计器完成所有代码来生成表单。

我的场景是一个基本的 GUI,用于编辑一些都继承自同一个父对象的对象。该表单由添加、删除和保存按钮以及对象绑定到的 DGV 组成。您可以使用泛型,而不是重复表单 N 次并对其进行强类型化。

解决方案 在设计器中设计您的第一个表单。您可以在此处放置您喜欢的任何非通用代码。不过对我来说,我有一个文件是严格的设计师代码:

NonGenericLookupForm.vb

Public Class NonGenericLookupForm   

End Class

此表单的设计器代码文件将包含您的所有控件。

然后创建另一个继承自该表单的文件:

GenericLookupForm.vb

Public Class GenericLookupForm(Of T As LookupItem, New)
    Inherits NonGenericLookupForm

    Private lookupItems as List(of T)

    ' Other code here. You can handle events from the inherited form

End Class

最后,您可以使用您的类型创建此表单:

Dim SpecificLookupEditor as New GenericLookupForm(of SpecificLookupType)
SpecificLookupEditor.ShowDialog()

【讨论】:

以上是关于在 Visual Studio 中设计通用表单的主要内容,如果未能解决你的问题,请参考以下文章

[.net 面向对象程序设计深入]UML——在Visual Studio 2013/2015中设计UML类图

powershell 模板:使用PowerShell启动在Visual Studio中设计的.xaml文件(MainWindow.xaml)。它会自动删除a的属性

如何在 Visual Studio 2017 中设置表单控件的工具提示属性

在visual studio中设置流程标题附加到流程c#

在 Android Studio 中设计可滚动内容时要遵循的方法是啥?

如何在 Visual Studio 2008 或 Visual Studio 2010 中设置 JavaScript 断点