2011-08-02 11 views
1

カスタムユーザーコントロールがあり、そのFontプロパティがオーバーライドされています。カスタムusercontrolのオーバーライドされたフォントプロパティがデザイナファイルに表示されない

フォームにusercontrolのコピーをドロップすると、Fontプロパティをうまく設定できますが、フォームのデザイナファイルに表示される 'Font'に設定した値が表示されません。私のアプリケーションをコンパイル/実行すると、入力した値は失われます。

また、Textプロパティをオーバーライドして、デザイナーファイルでこの値が設定されていないことを確認することもできます。これを行うためにここで回答が見つかるまで(私は ' 「DesignerSerializationVisibility」および「EditorBrowsable」属性)。私はフォントのために同じことを試みたが役に立たなかった。何か案は?

private Font _Font = UserControl.DefaultFont; 

    [Description("Sets the font of the button caption"),, 
    Browsable(true), 
    Bindable(true), 
    EditorBrowsable(EditorBrowsableState.Always), 
    DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 
    public override Font Font 
    { 
     get { return _Font; } 
     set 
     { 
      _Font = value; 
     } 

    } 
+0

は、あなただけの 'base.Font'を使用することができませんか? 2つのインスタンスを持つ点は何ですか? – Patrick

+0

文書にも[this](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.font.aspx)があります。 "*継承先への注釈 Fontプロパティをオーバーライドするとき派生クラスでは、基本クラスのFontプロパティを使用して基本実装を拡張します。そうでない場合は、すべての実装を指定する必要があります。Fontプロパティのgetアクセサとsetアクセサの両方をオーバーライドする必要はなく、 。* " – Patrick

答えて

0
はこれにあなたのコードを変更

public UserControl1() 
{ 
    InitializeComponent(); 
    base.AutoScaleMode = AutoScaleMode.None; 
} 

[Description("Sets the font of the button caption")] 
public override Font Font 
{ 
    get { return _Font; } 
    set { _Font = base.Font = value; } 
} 
+0

それはデザイナファイルに値を取得しますが、基本フォントプロパティを設定すると、私のユーザコントロール上の子コントロールのサイジングが全て破られてしまいます。たとえば、フォントサイズを大きくすると、ユーザーコントロール上にあるボタンが大きくなります。 –

+0

@Mike R.更新された回答:AutoScaleMode =フォント(デフォルト)をNoneに変更します。 – LarsTech

+0

ちょうど自分自身につまずいた!多くのありがとう 'ラーステック' –