head.WriteLine()

Dienstag, Juli 04, 2006

Extender Provider: DisplayName-Attribut in .NET 2.0

Extender Provider sind eine sehr nützliche Erfindung, ermöglichen Sie es doch, Komponenten um Eigenschaften zu erweitern, die diese nicht selbst implementieren. Um eine Extender-Eigenschaft als solche kenntlich zu machen, wird diese im PropertyGrid zusammen mit dem Namen der Extender-Klasse abgebildet. Dies sieht dann in etwa so aus:

















In .NET 2.0 ist es nun möglich, diese Darstellungsform anzupassen. Hiefür wurde das DisplayName-Attribut eingeführt, dass oberhalb der Get-Methode des Extenders notiert werden kann. Das folgende Beispiel zeigt die Implementierung eines einfachen Extender Providers, der dieses Feature nutzt:


[ProvideProperty("MyExtenderProperty", typeof(Control))]
public class MyExtender : Component, IExtenderProvider
{
    Hashtable m_value;
    public MyExtender()
    {
        m_value = new Hashtable();
    }

    [DisplayName("MyExtenderProperty")]
    public string GetMyExtenderProperty(object obj)
    {
        if (m_value.Contains(obj))
        {
            return m_value[obj].ToString();
        }
        else
        {
            return string.Empty;
        }
    }

    public void SetMyExtenderProperty(object obj, string value)
    {
        if (m_value.Contains(obj))
        {
            m_value[obj] = value;
        }
        else
        {
            m_value.Add(obj, value);
        }
    }

    public bool CanExtend(object extendee)
    {
        return extendee is Control;
    }
}

Im PropertyGrid wirkt es nun beispielsweise so, als wäre MyExtenderProperty eine vollwertige Eigenschaft der Form-Klasse.