PropertyTab Class

PropertyTab Class


Provides a base class for property tabs.

Namespace:   System.Windows.Forms.Design
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public abstract class PropertyTab : IExtenderProvider


Initializes a new instance of the PropertyTab class.


Gets the bitmap that is displayed for the PropertyTab.


Gets or sets the array of components the property tab is associated with.


Gets the Help keyword that is to be associated with this tab.


Gets the name for the property tab.


Gets a value indicating whether this PropertyTab can display properties for the specified component.


Releases all the resources used by the PropertyTab.


Releases the unmanaged resources used by the PropertyTab and optionally releases the managed resources.


Determines whether the specified object is equal to the current object.(Inherited from Object.)


Allows a PropertyTab to attempt to free resources and perform other cleanup operations before the PropertyTab is reclaimed by garbage collection.(Overrides Object.Finalize().)


Gets the default property of the specified component.


Serves as the default hash function. (Inherited from Object.)

System_CAPS_pubmethodGetProperties(ITypeDescriptorContext, Object, Attribute[])

Gets the properties of the specified component that match the specified attributes and context.


Gets the properties of the specified component.

System_CAPS_pubmethodGetProperties(Object, Attribute[])

Gets the properties of the specified component that match the specified attributes.


Gets the Type of the current instance.(Inherited from Object.)


Creates a shallow copy of the current Object.(Inherited from Object.)


Returns a string that represents the current object.(Inherited from Object.)

The PropertyTab class provides the base class behavior for a property tab. Property tabs are displayed on the toolbar of the PropertyGrid control of the Properties window, and allow a component to display different views of its properties or other data.

User code will usually not create an instance of a PropertyTab directly. Instead, a PropertyTabAttribute that indicates the type of the property tab or property tabs to display for a component can be associated with the properties or types that the PropertyTab should be displayed for.

The PropertyGrid will instantiate a PropertyTab of the type specified by a PropertyTabAttribute associated with the type or property field of the component that is being browsed.

Legacy Code Example

The following code example provides an example PropertyTab that lists any properties on a component, arranged by type name.

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace TypeCategoryTabExample
    // This component adds a TypeCategoryTab to the property browser 
    // that is available for any components in the current design mode document.
    [PropertyTabAttribute(typeof(TypeCategoryTab), PropertyTabScope.Document)]
    public class TypeCategoryTabComponent : System.ComponentModel.Component
        public TypeCategoryTabComponent()

    // A TypeCategoryTab property tab lists properties by the 
    // category of the type of each property.
    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] 
    public class TypeCategoryTab : PropertyTab
        // This string contains a Base-64 encoded and serialized example property tab image.
        private string img = "AAEAAAD/////AQAAAAAAAAAMAgAAAFRTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj0xLjAuMzMwMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJhd2luZy5CaXRtYXABAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9gAAAAJCTfYAAAAAAAAANgAAACgAAAAIAAAACAAAAAEAGAAAAAAAAAAAAMQOAADEDgAAAAAAAAAAAAD///////////////////////////////////9ZgABZgADzPz/zPz/zPz9AgP//////////gAD/gAD/AAD/AAD/AACKyub///////+AAACAAAAAAP8AAP8AAP9AgP////////9ZgABZgABz13hz13hz13hAgP//////////gAD/gACA/wCA/wCA/wAA//////////+AAACAAAAAAP8AAP8AAP9AgP////////////////////////////////////8L";

        public TypeCategoryTab()

        // Returns the properties of the specified component extended with 
        // a CategoryAttribute reflecting the name of the type of the property.
        public override System.ComponentModel.PropertyDescriptorCollection GetProperties(object component, System.Attribute[] attributes)
            PropertyDescriptorCollection props;
            if( attributes == null )
                props = TypeDescriptor.GetProperties(component);    
                props = TypeDescriptor.GetProperties(component, attributes);    

            PropertyDescriptor[] propArray = new PropertyDescriptor[props.Count];            
            for(int i=0; i<props.Count; i++)           
                // Create a new PropertyDescriptor from the old one, with 
                // a CategoryAttribute matching the name of the type.
                propArray[i] = TypeDescriptor.CreateProperty(props[i].ComponentType, props[i], new CategoryAttribute(props[i].PropertyType.Name));
            return new PropertyDescriptorCollection( propArray );

        public override System.ComponentModel.PropertyDescriptorCollection GetProperties(object component)
            return this.GetProperties(component, null);

        // Provides the name for the property tab.
        public override string TabName
                return "Properties by Type";

        // Provides an image for the property tab.
        public override System.Drawing.Bitmap Bitmap
                Bitmap bmp = new Bitmap(DeserializeFromBase64Text(img));
                return bmp;

        // This method can be used to retrieve an Image from a block of Base64-encoded text.
        private Image DeserializeFromBase64Text(string text)
            Image img = null;
            byte[] memBytes = Convert.FromBase64String(text);
            IFormatter formatter = new BinaryFormatter();
            MemoryStream stream = new MemoryStream(memBytes);
            img = (Image)formatter.Deserialize(stream);
            return img;

for full access to system resources. Demand value: InheritanceDemand. Associated state:

.NET Framework
Available since 1.1

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top
© 2015 Microsoft