Frage

Ich versuche, zu lernen und zu verstehen, was und wie C # Dinge tut. Ich bin historisch ein SichtFoxpro (VFP) Entwickler, und etwas in die Jahre der visuellen Erbe verdorben durch meine eigene Grundlinie der Benutzer die Erstellung steuert auf eine breite Anwendung verwendet werden.

Bei dem Versuch, die Parallelen in C # zu lernen, ich bin auf etwas stecken. Sagen, dass ich mein eigenes Label Kontrolle ableiten (Kontrolle ist Unterklasse von Label) mit einer Schriftart „Arial“ definiert, 10 Punkt. Dann wird auf jede Form ich es in den, wird der Designer automatisch Vorfülle in einigen Eigenschaftswerte, die in der „Designer.cs“ Teil der Form-Klasse zu sehen ist.

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";

Ich will die Dinge verhindern, wie die Schriftart, Farbe, Größe, Auto-Size von jedes Mal erzeugt immer eine Kontrolle über die Form gelegt. Wenn ich später entscheiden, die Schrift von „Arial“ 10 zu ändern, „Tahoma“ 11, würde ich wieder in allen Formen gehen (und was auch immer andere benutzerdefinierte Steuerelemente) und bearbeiten wechseln.

In VFP, wenn ich etwas von meiner Basisklasse ändern, werden alle Formulare automatisch die Änderungen erkennen. Ich habe nichts zu bearbeiten (mit Ausnahme von möglichen Ausrichtungen über Sizing Auswirkungen) ... aber Farbe, Schriftart, und alle sind sonst keine Probleme in VFP ...

In C #, muss ich zurückgehen und jede Form zu ändern, damit es durch die neuen / aktualisierten Werte der Klasse erkannt wird ...

Gibt es eine vernünftige Möglichkeit, dies zu vermeiden?

War es hilfreich?

Lösung

Hier ist eine einfache Lösung, die ReadOnlyAttribute in der abgeleiteten Klasse.

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

Die ReadOnlyAttribute wird deaktivieren Eigentum Bearbeitung in die VS.NET Designer.

Andere Tipps

Statt die "ReadOnlyAttribute" zu verwenden, versuchen, die Verwendung von " Default “statt. Wenn ich mich richtig erinnere, erstellen die Designer sollen nicht Code die Eigenschaft zu setzen, wenn der aktuelle Wert den Wert in dem „Default“ gespeichert entspricht.

Versuchen

Hinzufügen der Readonly-Attribut die Eigenschaften der abgeleiteten Klassen:

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

Die ReadOnlyAttribute sollten das Verhalten Readonly zur Entwurfszeit erzwingen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top