Frage

Ich möchte in einem Propertygrid eine Dropdown-Liste anzeigen können, die einen „String“-Wert anzeigt, aber einen „int“-Wert zurückgibt.

Lassen Sie uns zum Beispiel festlegen, dass ich diese Klasse habe:

public class MyObjectOptions : StringConverter
{
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        MyObjectCollection mm = new MyObjectCollection();

        List<String> names = new List<String>
        foreach (MyObject m in mm)
        {
            m.Id // Need to store this somewhere ...
            names.Add(m.Name);
        }

        return new StandardValuesCollection(name);
    }

    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
    {
        return true;
    }
}

Hier ist meine Klassenverwendung im Propertygrid-Steuerelement

public class MyObjectProperty
{
    [TypeConverter(typeof(MyObjectOptions))]
    public int Id
    {
        get { return this.id; }
        set { this.id = value; }
    }
}

Wie Sie sehen, möchte ich die ID des Objekts speichern, aber seinen Namen in der Dropdown-Liste anzeigen ...Ich versuche, eine Hashtabelle zu verwenden, aber es funktioniert nicht ...

Übrigens – ich verwende die Version 3.5 von .Net, aber ich verwende nur WinForm (nicht WPF).

War es hilfreich?

Lösung

Sie können GetStandardValues ​​dafür nicht verwenden.Diese Methode wäre nützlich, wenn Sie Ihre Ganzzahlwerte auf beispielsweise 1, 5 und 10 beschränken müssten.

Wenn Sie Zeichenfolgen in Ihrem Eigenschaftswert anzeigen möchten, müssen Sie lediglich die Methoden ConvertTo und ConvertFrom Ihres TypeConverters überschreiben.Das PropertyGrid verwendet die konvertierten Zeichenfolgen in der Dropdown-Liste.

Was Ihre Hashtabelle betrifft, können Sie sie in Ihrem TypeConverter speichern, wenn ihr Inhalt statisch ist.Wenn es dynamisch ist, ist es am besten, es von der Zielinstanz des Grids verwalten zu lassen.Von Ihrem Konverter aus können Sie über die Eigenschaft TypeDescriptorContext.Instance darauf zugreifen.

Hoffentlich hilft das.

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