Frage

Ich bin neu in C #, aber nicht neu Codierung --being es für fast zwei decades-- tun, und hat ein Problem mit Eigenschaften in einem benutzerdefinierten Steuerelement Ich bin Gebäude, das erben von einem Gremium. Wenn ich meine Eigenschaften setzen, kann ich sie in Designer Eigenschaftenliste sehen und sie selbst festlegen können, aber wenn meine kleine Anwendung ausgeführt wird, scheint es, diese Eigenschaften Werte nicht verwendet werden. Das gleiche, wenn ich eine Eigenschaft ändern programmatisch: kein Fehler, aber meine Kontrolle tut nichts, ist es, als würden sie nicht richtig eingestellt. Allerdings, wenn ich es programmatisch whithin der Klasse zu tun, sie funktionieren. Meine Vermutung ist, dass etwas in meinen Eigenschaften setzen / Zeug ist nicht richtig. Bitte beachten Sie den folgenden Code ein Stück, wie ich es mache:

public class ColorStrip : Panel
{
    // properties
    // ------------------------------------------
    // size of color clusters (boxes)
    private int _clusterSize = 20;
    // controls if show the buttons panel
    private Boolean _showButtons;

    // property setters/getters
    // ------------------------------------------
    // clusterSize...
    public int clusterSize
    {
        get { return _clusterSize; }
        set { _clusterSize = value; }
    }
    // showButtons...
    public Boolean showButtons
    {
        get { return _showButtons; }
        set { Console.Write(_showButtons); _showButtons = value; }
    }
    ....

Also in meiner Form, zum Beispiel in der Last oder sogar in einem Click-Ereignisse irgendwo, wenn ich colorStrip1.showButtons setzen = false; oder colorStrip1.showButtons = true; was auch immer (colorStrip1 die Instanznamen in der Form im Entwurfsmodus nach dem Platzieren des Steuer sei) ... Console.Write sagt immer ‚falsch‘; Auch wenn ich es in der Design-Eigenschaften-Liste als ‚true‘ gesetzt wird es nicht auf den ständigen Wert widerspiegelt, auch wenn ich es auf true Standard, es wird nie extern ändern. Irgendwelche Ideen? Nicht die Methoden erhalten den neuen und extern Eigenschaftswert angesiedelt weder offensichtlich die Getter / Setter Sache funktioniert nicht. Mir scheint, mache ich so, wie ich Satz nicht richtig oder meine Eigenschaften erhalten außerhalb die Klasse. Es funktioniert nur im Innern, wie ein Zauber ... Jede Hilfe ... sehr zu schätzen wissen!

Prost

Lithium

P. S. Zur Klärung LÖSUNG:

Zur Einstellung der Eigenschaft in diesem Fall hat nicht funktioniert, weil ich einen neuen Sollwert im Konstruktor zu verwenden versuche , die nicht die neuen Werte bekommen scheint, da ist es gut, Gebäude die Sache. Wenn I den Eigenschaftswert ändern im Designmodus> Editor oder die im Code von außen auf das Objekt, sagt in seinem Load-Ereignisse der übergeordneten Form, wird es aber für alle Methoden außer dem Konstruktor lesbar ändern , natürlich:)

War es hilfreich?

Lösung

Es ist wahrscheinlich eine Frage der Reihenfolge der Ausführung. Ihr Eigentum Setter setzt nur eine Variable, aber nicht tatsächlich Auslöser etwas über die Kontrolle des Staates zu aktualisieren im Zusammenhang mit dieser Variablen (zum Beispiel das Hinzufügen oder zeigt die Tasten Ich gehe davon aus).

Wenn Sie die Eigenschaft befre den Rest der Initialisierung gesetzt erfolgt ist, wird der Wert verwendet wird, sonst ist es nicht, weil während der anfänglichen Sprung der Standardwert noch der Wert der Eigenschaft ist.

Sie müssen sich auf dem Setter handeln, hier einig Pseudo-Code zu veranschaulichen:

set {
  _showButtons = value;
  if (alreadyInitialized) {
    UpdateButtons();
  }
}

Hinweis: stellen Sie sicher, zum ersten Satz, den Wert, dann handeln - Sie sonst am Ende des alten Wert mit (genau wie Ihre Console.Write() tun)

.

Andere Tipps

Der angegebene Code nicht problematisch aussehen. Sind Sie sicher, dass Sie sich auf die gleiche Instanz von ColorStrip? Überprüfen Sie auch Ihre .Designer.cs Datei, um sicherzustellen, dass der Code Festlegen der Eigenschaft ist es.

In der Tat versuchen, Ihren Code zu vereinfachen, indem Sie die automatische Umsetzung von Eigenschaften:

public int clusterSize { get;set;}
public Boolean showButtons {get;set;}

public ColorStrip() { ... clusterSize = 20; ... }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top