Laden...

DescriptionAttribute von vorhandener Klasse übernehmen

Erstellt von juetho vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.423 Views
J
juetho Themenstarter:in
3.331 Beiträge seit 2006
vor 16 Jahren
DescriptionAttribute von vorhandener Klasse übernehmen

Beschreibung:

Diese Attribute-Klasse holt von einer vorhandenen Klasse und Eigenschaft die Beschreibung und stellt sie einer neuen Beschreibung (z.B. in einem eigenen UserControl) zur Verfügung.

Verwendung
In meiner DataGridView MaskedTextBoxColumn benutze ich anstelle des Description-Attributs das ReferencedDescription-Attribut und hole für die Mask-Eigenschaft den Text, den NET für die MaskedTextBox vorgemerkt hat:

[ReferencedDescription(typeof(System.Windows.Forms.MaskedTextBox), "Mask")]

Definition
Zunächst werden alle Eigenschaften des referenzierten Typs geholt. Wenn die gewünschte Eigenschaft wirklich vorhanden ist, werden alle deren Attribute gelesen; das DescriptionAttribute wird registriert.


using System.ComponentModel;

#region Referenced Description Attribute
	
public class ReferencedDescriptionAttribute : DescriptionAttribute
{
		
	public ReferencedDescriptionAttribute(Type referencedType, string propertyName)
	{
		string result = "Referenced description not available";
		
		//	gets the properties of the referenced type
		PropertyDescriptorCollection properties 
			= TypeDescriptor.GetProperties(referencedType);
		
		if (properties != null) {
			// gets a PropertyDescriptor to the specific property.
			PropertyDescriptor property = properties[propertyName];
			if (property != null) {
				//  gets the attributes of the required property
				AttributeCollection attributes = property.Attributes;
					
				// Gets the description attribute from the collection.
				DescriptionAttribute descript
					= (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
					
				// register the referenced description
				if (!String.IsNullOrEmpty(descript.Description))
					result = descript.Description;
			}
		}
		DescriptionValue = result;
		
	}
}
	
#endregion

Schlagwörter: DescriptionAttribute Description Attribute

J
juetho Themenstarter:in
3.331 Beiträge seit 2006
vor 16 Jahren

Kleine Änderung in der letzten Zuweisung (das habe ich direkt im Code erledigt): Die "vorhandene" Description wird nur dann übernommen, wenn sie nicht leer ist.

Begründung: Die "übliche" Prüfung, ob dieses Attribut vorhanden ist "!= null", kann entfallen, weil im Falle eines Falles ein Standardwert des Attributs (nämlich ein leerer String) immer übergeben wird; eine NullReferenceException kann es deshalb hier nicht geben. Ich möchte aber den Standardtext "not available" nur dann überschreiben, wenn wirklich eine Beschreibung gefunden wurde.

Jürgen

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo juetho,

m.E. kann und sollte der leere private Konstruktor entfallen. Er wird in der Klasse nicht benutzt und außerhalb der Klasse kann er nicht benutzt werden. Letzteres wäre aber ebenfalls so, wenn er nicht vorhanden wäre.

herbivore

J
juetho Themenstarter:in
3.331 Beiträge seit 2006
vor 16 Jahren

Danke für den Hinweis, herbivore, wurde erledigt. Jürgen