【发布时间】:2021-01-07 15:47:15
【问题描述】:
我有一个自定义结构:
Public Structure myStruct
Public Sub New(ByVal row As Integer, ByVal Col As Integer)
X = row : Y = Col
End Sub
Property X() As Integer
Property Y() As Integer
end Structure
我在 UserControl 中用作属性:
Public Class myUC
inherits UserControl
Property myProp1 As String = "test"
Property MyProp2 As myStruct = New myStruct(1, 2)
End Class
如果我将此 UserControl 放在窗体上,Windows 窗体设计器将在 InitializeComponent 方法中创建一段代码,如下所示:
'
'MyUC1
'
Me.MyUC1.Location = New System.Drawing.Point(205, 187)
Me.MyUC1.myProp1 = "test"
Me.MyUC1.MyProp2 = CType(resources.GetObject("MyUC1.MyProp2"), WindowsApp11.myStruct)
Me.MyUC1.Name = "MyUC1"
Me.MyUC1.Size = New System.Drawing.Size(150, 150)
Me.MyUC1.TabIndex = 0
但我希望 myStruct 像 System.Drawing.Point 结构一样序列化。因此生成的设计器代码应该是
'
'MyUC1
'
Me.MyUC1.Location = New System.Drawing.Point(205, 187)
Me.MyUC1.myProp1 = "test"
Me.MyUC1.MyProp2 = new WindowsApp11.myStruct(1,2)
Me.MyUC1.Name = "MyUC1"
Me.MyUC1.Size = New System.Drawing.Size(150, 150)
Me.MyUC1.TabIndex = 0
有谁知道如何告诉 Windows 窗体设计器如何序列化自定义结构。我正在考虑类似 Serialization.IXmlSerializable 接口之类的东西,但用于设计时。
我尝试使用 Google 查找内容,但我似乎使用了错误的搜索表达式。
谢谢
【问题讨论】:
-
你需要实现一个类型转换器并重写一些方法。您将在this answer 中找到一个示例。
-
这里是source code of
PointConverter。此功能的关键方法是GetCreateInstanceSupported和CreateInstance。 -
我重新打开,因为这是一个 VB 问题。
-
谢谢你。这正是我正在寻找的解决方案!它就像一个魅力!
-
没问题,我贴了一个VB答案来帮助以后的读者。
标签: .net vb.net winforms windows-forms-designer