C# TypConverter für PropertyGrid

second.name

Lieutenant
🎅Rätsel-Elite ’24
Registriert
Sep. 2009
Beiträge
713
Hallo Forum,
ich möchte, dass ein String-Array meiner Klasse, welches in einem PropertyGrid angezeigt wird, nicht "so komisch" wie im Anhang, sonder als Drop-Down-Auswahl angezeigt wird. Ich versuch's schon eine ganze Weile - leider ohne Erfolg. :(

Code:
[CategoryAttribute("Lokale Einstellungen"),
 DescriptionAttribute("Liste der verfügbaren Maschinen zur Wahl der Standardmaschine"),
 XmlIgnoreAttribute]
public string[] AvailableMachines { get; set; }
 

Anhänge

  • PropGrid.PNG
    PropGrid.PNG
    6 KB · Aufrufe: 387
Danke für die Antwort.

Ist aber leider nicht das Richtige - hatte ich ebenfalls bereits gegoogelt, allerdings sind diese Beispiele immer auf eine statische List, oder Collection im StringConverter beschränkt.
Ich möchte ein öffentliches Feld (dessen Inhalt ich zur Laufzeit eben nicht kenne) in einem DropDown visualisieren.
 
Das hast du aber nicht gefragt. Deine Frage war, wie es zu einer Combobox wird und das beantwortet der Link.
Zu deiner zweiten Frage: Google nach "modify propertygrid at runtime" -> erster Treffer hat bereits in der Fragestellung eine fertige Lösung für dich und verlinkt auch noch auf einen codeproject Artikel, den er dafür genutzt hat. Spoiler: Das geht nicht automatisch.
 
Enurian schrieb:
Das hast du aber nicht gefragt. Deine Frage war, wie es zu einer Combobox wird und das beantwortet der Link.
Zu deiner zweiten Frage: Google nach "modify propertygrid at runtime" -> erster Treffer hat bereits in der Fragestellung eine fertige Lösung für dich und verlinkt auch noch auf einen codeproject Artikel, den er dafür genutzt hat. Spoiler: Das geht nicht automatisch.

...Doch, genau das habe ich gefragt und aus diesem Grund auch extra das öffentliche Feld "AvailableMachines" als Code-Auszug mit hingeschrieben.

Code:
public string[] AvailableMachines { get; set; }

...Und dort steht "[]" hinter String - also ein Array. Und damit beantworte ich auch deine zweite Aussage zu "google nach": Auch das ist nicht das, wonach ich suche - ich habe eine String[]-Array!

Wenn du dich aber so gut auskennst, kannst du bitte einfach eine sinnvolle Lösung hinschrieben.
 
Zuletzt bearbeitet:
Code:
public class MachineClass
    {
        private string[] machines;

        public MachineClass()
        {
            machines = new string[] { "Maschine 1", "Maschine 2", "Maschine 3" };
        }

        [Browsable(false)]
        public string[] Machines
        {
            get { return machines; }
            set { machines = value; }
        }

        [TypeConverter(typeof(MyConverter))]
        public string AvailableMachines { get; set; }
    }

    public class MyConverter : TypeConverter
    {
        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
        {
            return true;
        }

        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {
            var machineClass = context.Instance as MachineClass;
            if (machineClass != null)
                return new StandardValuesCollection(machineClass.Machines);

            return base.GetStandardValues(context);
        }
    }

Also war Antwort 1 doch bereits das Richtige...
 
Zuletzt bearbeitet:
Vielen Dank Enurian! Das ist jetzt genau das, wonach ich gesucht habe und es funktioniert 1A. :daumen:
 
Zurück
Oben