我有大约6个类都继承自同一个基类。我正在创建一个用户界面,允许用户编辑这些类,然后将它们保存到数据库中。如果我只能使用泛型,我可以让所有代码都很好用。
一旦我尝试使表格通用,就会出现一些严重的问题。我已经阅读了一些解决方案,例如:http://social.msdn.microsoft.com/Forums/windows/en-US/afdfce40-8d7a-4300-bd8d-26e18c320a71/designer-error-with-descendant-of-generic-form?forum=winformsdesigner但它们似乎并没有起作用。所有这一切都是为我提供一个设计的表单 - 但不能用于泛型,以及一个带有从中继承的泛型的空表单类。
我需要一个可以在设计器中编辑的表单,并在我的程序中使用泛型类型进行构造,它维护设计器中的所有设计和代码。
有没有人有这方面的工作解决方案?
答案 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()