Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

Referenced Description Attribute

4.29/5 (3 votes)
6 May 2008CPOL 1   102  
An article on how to call an existing description in the designer

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:

C#
[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:

  1. The referenced type
  2. The referenced property
C#
using System;
using System.ComponentModel;

public class ReferencedDescriptionAttribute : DescriptionAttribute
{
  public ReferencedDescriptionAttribute(Type referencedType, string propertyName)
  {
    //  default result string
    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.

C#
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:

C#
    AttributeCollection attributes = property.Attributes;
    DescriptionAttribute descript
      = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];

    // register the referenced description
    if (!String.IsNullOrEmpty(descript.Description))
      result = descript.Description;
  }
}
DescriptionValue = result;

That's all.

History

  • 05/03/2008 First version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)