2009-07-08 23 views
6

非常に特殊な背景と境界線が必要なため、カスタムLabelコントロールを作成しています(標準のLabelコントロールを継承し、背景とテキストを再描画するだけです)。コントロールのコンストラクタでは、AutoSizeプロパティをfalseに設定して、新しいラベルの標準デフォルトサイズを設定できます。私は(コードで)実行時に新しいカスタムラベルを作成する場合は、このコントロールを使用して自分のアプリケーションでラベルコントロールは、デザイン時と実行時で動作が異なる

Public Sub New() 

    'Set the default size of the control to 75x24 
    Me.Height = 24 
    Me.Width = 75 

    'Turn off the autosize property. 
    Me.AutoSize = False 

    'Turn on double-buffering. 
    Me.DoubleBuffered = True 

End Sub 

は、AutoSizeプロパティはFalseのままで、それが正常に動作します。

デザイン時にフォームに新しいカスタムラベルを追加しようとすると、AutoSizeプロパティがTrueに設定されているため、プロパティウィンドウで手動でFalseに設定する必要があります。それは大きな問題ではありませんが、なぜ行動が違うのか分かりません。

何がこの動作の違いを引き起こしていますか?

+0

コンストラクタで、高さと幅を設定する前にAutoSizeをfalseに設定します。 – NascarEd

+0

@NascarEd、ありがとうございました。私はそれを両方の方法で試しましたが、それは違いを生じさせないようです。 – Stewbob

+0

もう一つの注意点として、カスタムコントロールを作成した後は、フォームにドロップしてデザイナーが生成するコードを調べることをお勧めします。デザイナーは通常、あなたが期待しないことをします。 – NascarEd

答えて

3

私はついにこれをVBで動作させました。基本的には、AutoSizeプロパティをオーバーライドして読み取り専用のプロパティにすることで、Setステートメントを無効にする必要がありました。

 Public Overrides Property AutoSize() As Boolean 
     Get 
      Return MyBase.AutoSize 
     End Get 
     Set(ByVal value As Boolean) 
      'Do nothing here 
     End Set 
    End Property 

正しい方向に向けるためにNascarEdに感謝します。

< System.ComponentModel.DefaultValue(偽)> _

- :ちょうどあなたの将来のための情報

6

ラベルクラスでは、AutoSizeプロパティをオーバーライドする必要があります。

//(In C#) 
[System.ComponentModel.Browsable(false)] 
[System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)] 
public new bool AutoSize 
{ 
    get { return base.AutoSize; } 
    set { base.AutoSize = value; } 
} 

閲覧可能(false)をデザイン時にプロパティとあなたのデザイナーのファイルに任意のコードを書いていないし、デザイナーを教えてくれますDesignerSerializationVisibility属性を非表示になります。

+0

私はこれを実装しましたが、デザイナーが明示的にAutoSizeプロパティをtrueに設定しなくても、AutoSizeプロパティがまだオンの場合と同じように明示的に.Sizeプロパティを設定します。たぶん私はコントロールのサイズプロパティをオーバーライドしようとします。 – Stewbob

+0

これはVBでは動作しないようですが、私はあなたの助けに感謝します。それは私にカスタムコントロールを作成するためのより良い洞察を与えました。ありがとう! – Stewbob

0

作成している新しいコントロールのデザインモードに入ると、コントロールを選択してプロパティを変更することができます。その時点で、そのコントロールをフォーム(または別のコントロール)に追加するたびに、デフォルトとしてそこに設定したプロパティがあります。これにより、デフォルト値を設定して、開発者が今後サイズを変更できないように変更できるように、デフォルト値を設定しておくことができます。

また、デザイナーが生成したコードをチェックアウトして、探している動作を生成するために行ったことを正確に表示できます。

2

は、プロパティウィンドウでFalseにAutoSizeプロパティを設定するには、属性を設定する必要がありますPublic Overrides Property AutoSize()Boolean ...

+0

ありがとう、良い情報。 – Stewbob

関連する問題