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:
[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.
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.