在Visual Studio中设计通用表单

时间:2014-01-03 22:41:43

标签: .net vb.net winforms generics visual-studio-2012

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

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

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

有没有人有这方面的工作解决方案?

1 个答案:

答案 0 :(得分: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()