Introduction
This attribute shows the existing description of another control and a specific property instead of writing the same text again.
Background
The .NET Framework contains many descriptions that are shown in designer. I didn't want to write the same text again for another control.
Using the Code
Add the source file to a specific assembly, e.g. FrameworkExtensions.dll, and add a reference to this assembly.
Use the ReferencedDescriptionAttribute
at the top of your control's class calling the referenced type and the specific property.
Example: You developed a DataGridViewMaskedTextColumn
with your own property Mask
. You want the description to match the description of MaskedTextBox
's property Mask
. Then you define:
[ReferencedDescription(typeof(System.Windows.Forms.MaskedTextBox), "Mask")]
How It Works
The ReferencedDescriptionAttribute
class is derived from the DescriptionAttribute
class. The only constructor needs two arguments:
- The referenced type
- The referenced property
using System;
using System.ComponentModel;
public class ReferencedDescriptionAttribute : DescriptionAttribute
{
public ReferencedDescriptionAttribute(Type referencedType, string propertyName)
{
string result = "Referenced description not available";
}
}
First, we get the properties of the referenced type. If they exist, we get the PropertyDescriptor
to the specific property.
PropertyDescriptorCollection properties
= TypeDescriptor.GetProperties(referencedType);
if (properties != null) {
PropertyDescriptor property = properties[propertyName];
if (property != null) {
Next, we get all the attributes to the property. The DescriptionAttribute
is always available with an empty string
by default. If it's not empty, we use this description as reference:
AttributeCollection attributes = property.Attributes;
DescriptionAttribute descript
= (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
if (!String.IsNullOrEmpty(descript.Description))
result = descript.Description;
}
}
DescriptionValue = result;
That's all.
History