0

Designer が VS2010 で行う方法と同様に、オブジェクトをコード単位でコンストラクターに逆変換しようとしています。

例: Font オブジェクトのプロパティ

  • 名前:Microsoft Sans Serif
  • サイズ:9.75
  • 単位:ポイント
  • 太字:偽
  • GdiCharSet:0
  • GdiVerticalFont:False
  • 斜体:偽
  • 取り消し: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