2009-03-12 9 views
3

私は、C#が何をどのようにして行うのかを習得しようとしています。私は歴史的にはVisual Foxpro(VFP)の開発者であり、アプリケーションコントロールの独自のベースラインを作成することで、アプリケーションの幅広い用途に使用できるようになりました。オーバーライドされたWinFormコントロールの「デフォルト」値は、どのようにして防止できますか?

C#のパラレルを学習しようとすると、何かにぶつかっています。私は自分のラベルコントロール(コントロールはラベルのサブクラスである)を "Arial"というフォントで定義しているとします。次に、フォームを追加すると、Designerは自動的にFormクラスの "Designer.cs"部分に表示されるいくつかのプロパティ値を事前に入力します。

this.LabelHdr2.AutoSize = true; 
this.LabelHdr2.Font = new System.Drawing.Font("Arial", 14F, System.Drawing.FontStyle.Bold); 
this.LabelHdr2.ForeColor = System.Drawing.Color.Blue; 
this.LabelHdr2.Location = new System.Drawing.Point(150, 65); 
this.LabelHdr2.Name = "LabelHdr2"; 
this.LabelHdr2.Size = new System.Drawing.Size(158, 22); 
this.LabelHdr2.TabIndex = 5; 
this.LabelHdr2.Text = "LabelHdr2"; 

コントロールがフォームに置かれるたびにフォント、色、サイズ、AutoSizeが生成されないようにします。後でフォントを「Arial」10から「Tahoma」11に変更する場合は、すべてのフォーム(およびその他のカスタムコントロール)に戻って、変更する必要があります。 VFPで

私は私の基本クラスの何かを変更した場合、すべてのフォームは自動的に変更を認識。私は何も編集する必要はありません(サイジングの影響によるアライメントの可能性は除きます)...しかし、色、フォントなどはVFPでは問題ありません。

C#では、それは、クラスの新しい/更新された値によって認識されるように、これを回避するための合理的な方法は、

あります...それぞれのフォームを変更?あなたの派生クラスのプロパティにReadOnly attributeを追加

答えて

3

は、派生クラスでReadOnlyAttributeを使用して簡単なソリューションです。

class MyLabel : Label 
{ 
    [ReadOnly(true)] 
    public override Font Font 
    { 
     get { return new Font(FontFamily.GenericMonospace, 10); } 
     set { /* do nothing */ } 
    } 
} 

ReadOnlyAttributeは、VS.NETデザイナのプロパティ編集を無効にします。代わりに「ReadOnlyAttribute」を使用しての

1

試してみてください。

[ReadOnly(true)] 
public override Font Font 
{ 
    get{ // Your Implementation Here } 
    set{ // Don't really care,do you? } 
} 

ReadOnlyAttributeは、デザイン時に読み取り専用の行動を強制する必要があります。ここで

4

は、「DefaultValueAttribute」の代わりに使用してみてください。私が正しく覚えていれば、デザイナーは、現在の値が "DefaultValueAttribute"に格納されている値と一致する場合、プロパティを設定するコードを作成すべきではありません。他の人からのコメントのために働くが、

+0

は、読み取り専用、デフォルト値の一部に優先するoccaisionがあるかもしれないので、私は[のDefaultValue(someValueの)]オプションについてコメントを好みます。しかし、フォントを返そうとしてエラーが発生します。 (somevalue)は、新しいobjではなく一定であることを期待しています – DRapp

+0

これを試してください:[DefaultValue(typeof(Font)、 "Microsoft Sans Serif、10 pt")](from this url:http://social.microsoft.com/フォーラム/ EN-US/netfxbcl /スレッド/ 9acb9a96-d461-4732-b99c-65390b4b53fa) – David

+0

いや...まだ、このページで作成します... this.defLabel1.Font =新しいSystem.Drawing.Font( "Microsoft Sans Serif"、8.25F、System.Drawing.FontStyle.Regular、System.Drawing.GraphicsUnit.Point、((byte)(0))); 私は今のところREAD ONLYオプションを(今のところは)固執すると思います。 – DRapp

関連する問題