3

私はC#が何をどのように行うかを学び、把握しようとしています。私は歴史的にVisualFoxpro(VFP)開発者であり、アプリケーション全体で使用されるユーザーコントロールの独自のベースラインを作成することにより、長年の視覚的継承に多少甘んじています。

C#の類似点を学ぼうとして、私は何かに固執しています。フォント「Arial」、10ポイントで定義された独自のラベルコントロール(コントロールはラベルのサブクラス)を派生させたとします。次に、追加するフォームで、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";

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

VFPでは、ベースクラスのいずれかを変更すると、すべてのフォームが自動的に変更を認識します。私は何も編集する必要はありません(サイズの影響による可能な配置を除いて)...しかし、色、フォント、およびその他すべてはVFPでは問題ありません...

C#では、クラスの新しい値/更新された値によって認識されるように、各フォームに戻って変更する必要があります...

これを回避する合理的な方法はありますか?

4

3 に答える 3

3

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

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

ReadOnlyAttribute、VS.NETデザイナでのプロパティ編集を無効にします。

于 2009-03-12T03:42:33.850 に答える
1

派生クラスのプロパティにReadOnly 属性を追加してみてください。

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

ReadOnlyAttribute は、設計時に ReadOnly 動作を強制する必要があります。

于 2009-03-12T03:40:58.580 に答える