radianの備忘録

プログラミングやPCに関する事をメモ代わりに残していきます

LabelコントロールのAutoSizeの初期値をFalseにする方法

LabelコントロールのAutoSizeプロパティは、何故かデフォルト値がFalseに設定されているにも関わらず、デザイナー画面で貼り付るとTrueに設定されてしまいます。

Labelを継承したコントロールで、コンストラクタでAutoSize=Falseにすれば簡単に出来るんじゃねとか思ってたのですが、どうも勝手にデザイナー画面がTrueに設定してしまうようです。AutoSizeをオーバーライドして色々やってみたりもしたのですが、やはりデザイナー画面で勝手にTrueにされてしまう現象は変わりませんでした。困ったものです。

最終的には、オーバーライドするのをやめて、独自にAutoSizeプロパティを定義し、InitLayoutで基底クラスのAutoSizeを上書きするという強引な方法で、何とか期待通りの動きになりました。

    Private _AutoSize As Boolean = False

    <DefaultValue(GetType(Boolean), "False")> _
    Public Overridable Shadows Property AutoSize As Boolean
        Get
            Return _AutoSize
        End Get
        Set(value As Boolean)
            _AutoSize = value
            MyBase.AutoSize = value
        End Set
    End Property

    Protected Overrides Sub InitLayout()
        MyBase.InitLayout()
        MyBase.AutoSize = _AutoSize
    End Sub