Search code examples
c#winformsvisual-studiowindows-forms-designerpropertygrid

Remove GenerateMember and Modifiers Properties in Designer


I created a Button descendant where I hide all the properties I don't use.

I do it like this:

[Browsable(false)]
[Bindable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Obsolete("", true)]
public new Boolean AllowDrop { get; set; }

Most properties get correctly hidden and cannot be used.

However there are two properties that I cannot get rid of.

enter image description here

Is there a way to also remove GenerateMember and Modifiers in the Designer?


Solution

  • You can create a new ControlDesigner for your control and override its PostFilterProperties method. The method lets you to change or remove the items within the dictionary of properties.

    The keys in the dictionary of properties are the names of the properties. Although Modifiers and GenerateMember are not actual properties of your control and they are design-time properties, you can still remove them this way:

    using System.Windows.Forms;
    using System.Windows.Forms.Design;
    [Designer(typeof(MyCustomControlDesigner))]
    public class MyCustomControl:Button
    {
    }
    public class MyCustomControlDesigner:ControlDesigner
    {
       protected override void PostFilterProperties(System.Collections.IDictionary properties)
       {
           base.PostFilterProperties(properties);
           properties.Remove("Modifiers");
           properties.Remove("GenerateMember");
       }
    }
    

    To hide properties in property grid, Instead of overriding or shadowing them, you can do the same thing for them.