[Solved] Propertygrid variabel gestalten



  • Edit:
    Hi.

    Hab zu der Frage die Antwort mit Beispiel hier gefunden:
    http://stackoverflow.com/questions/13673101/how-do-you-control-what-is-visible-in-a-property-grid-at-runtime

    Muss es aber noch testen...

    Hallo.

    Ich habe mich jetzt ein wenig mit dem Steuerelement PropertyGrid auseinandergesetzt und bin total begeistert von dessen Funktionen und Einfachheit.
    Jetzt aber hänge ich extrem. Ich möchte das PropertyGrid von den eigenen Einstellungen abhängig machen. Soll heißen:

    Ich habe ein bool Feld mit dem Namen TimeDependent. Wenn dieses Feld "true" ist, sollen weitere Felder darunter angezeigt werden - wenn false, nicht.

    Das ganze sieht abgespeckt in etwa so aus:

    class CEquation
        {
            private TimeDiscretisationENUM TimeDiscretisation;
            public static bool TimeDependent;
            public double TimeStep = 1.0e-3;
            private string TimeString = "1.0e-3";
    
            [DisplayName("Time dependent")] /*weitere Felder werden nur angezeigt, wenn dieses Feld "true" ist*/
            [Description("Pseude transient solver (True/False)")]
            [Category("Equation")]
            public bool TimeDependentAlias
            {
                get { return TimeDependent; }
                set { TimeDependent = value; }
            }
    
            [Browsable(true)] /*Ich wollte das über Browsable(true) bzw. (false) realisieren*/
            [DisplayName("Time discretisation")]
            [Description("Select the scheme of time discretisation")]
            [Category("Equation")]
            [TypeConverter(typeof(EquationConverter))]
            public TimeDiscretisationENUM TimeDiscretisationTypeAlias { get { return TimeDiscretisation; } set { TimeDiscretisation = value; } }
    
            [Browsable(true)] /*Hier das gleiche*/
            [DisplayName("Time step")]
            [Description("Timestep of pseude transient solver in secounds")]
            [Category("Equation")]
            public string TimeStepAlias
            {
                get { return TimeString; }
                set { TimeString = value; if (Double.TryParse(TimeString, out DoubleValue)) { TimeStep = DoubleValue; } }
            }
    
            public CEquation()
            {
            }
        }
    

    Eigentlich dachte ich, ich kann einfach in Zeile 19 und 26 schreiben:

    [Browsable(TimeDependent)]
    

    aber das lässt C# nicht zu mit dem Hinweis:
    Ein Attributargument muss ein constant-, typeof- oder Arrayerstellungsausdruck eines Attributparametertyps sein.

    Könnt ihr mir da weiter helfen, wie ich da rangehen kann, denn das werde ich noch sehr oft benötigen.
    Kann ich darüber hinaus auf dieses

    get; set;
    

    auch irgendwie verzichten? Habe damit noch nie gearbeitet.

    Vielen Dank für alle Anregungen.

    Gruß,
    CJens



  • Hallo,

    das mit dem Browsable-Attribut funktioniert so nicht, da eben nur Konstanten dort eingetragen werden können (wie auch die Fehlermeldung sagt).

    Für dynamisches Anzeigen im PropertyGrid such mal im Internet nach "c# propertygrid hide property runtime" - Stichwort: ICustomTypeDescriptor, z.B.
    Dynamic Properties for PropertyGrid
    Bending the .NET PropertyGrid to Your Will

    Und wegen dem "get; set;":
    Mit Eigenschaften arbeitest du doch schon. Oder meinst du die automatischen Eigenschaften

    int MyValue
    {
      get;
      set;
    }
    

    ?
    Dies ist nichts weiter als eine Kurzform für eine Eigenschaft, welche intern ein sog. Backingfield (d.h. privaten Member) nutzt:

    private int _myValue;
    
    int MyValue
    {
      get { return _myValue; }
      set { _myValue = value; }
    }
    

Anmelden zum Antworten