0

我正在尝试将对象反向转换为构造函数,类似于设计器在 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))

似乎也适用于其他序列化构造函数。

4

0 回答 0