我正在尝试将对象反向转换为构造函数,类似于设计器在 VS2010 中的操作方式。
示例:字体对象属性
- 名称:微软无衬线字体
- 尺寸:9.75
- 单位:点
- 粗体:假
- GdiCharSet:0
- GdiVerticalFont:False
- 斜体:假
- 删除:假
- 下划线:假
在表单设计器中生成以下...
Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
在运行时拥有一个有效的现有字体对象,
dim f as font = <new font code>
我如何在没有特定类知识的情况下获得构造函数代码行,就像任何类的自动化一样。
VS 设计师是怎么做到的呢?
编辑:
从评论中查看“CodeDomSerializer”后想出了这个,有没有更好的方法来做到这一点?
Dim f As New Font("MS Sans Serif", 7.25!, FontStyle.Regular, GraphicsUnit.Point, 0, False)
'Dim f As New Font("MS Sans Serif", 7.25!, 1 + 2 + 4, GraphicsUnit.Point, 0, False)
'Dim f As New Point(55, 34)
Dim dsm As New DesignerSerializationManager
dsm.PreserveNames = True
dsm.RecycleInstances = False
dsm.PropertyProvider = f
dsm.CreateSession()
Dim cds As CodeDomSerializer = dsm.GetSerializer(dsm.PropertyProvider.GetType, GetType(CodeDomSerializer))
Dim coce As CodeObjectCreateExpression = cds.Serialize(dsm, dsm.PropertyProvider)
Dim tw As New StringWriter
Dim vbcp As New VBCodeProvider
vbcp.GenerateCodeFromExpression(coce, tw, Nothing)
Console.WriteLine(tw.ToString)
vbcp.Dispose()
tw.Dispose()
'coce
'cds
'dsm
f.Dispose()
生成这条线...
New System.Drawing.Font("Microsoft Sans Serif", 7.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
似乎也适用于其他序列化构造函数。