在Designer中删除GenerateMember和Modifiers属性

我创建了一个Button后代,我隐藏了所有不使用的属性。

我是这样做的:

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

大多数属性都被正确隐藏,无法使用。

但是有两个属性是我无法摆脱的。

在此处输入图像描述

有没有办法在Designer中删除GenerateMember和Modifiers?

您可以为控件创建一个新的ControlDesigner并覆盖其PostFilterProperties方法。 该方法允许您更改或删除属性字典中的项目。

属性字典中的键是属性的名称。 虽然ModifiersGenerateMember不是控件的实际属性,但它们是设计时属性,但您可以通过以下方式删除它们:

 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"); } } 

要隐藏属性网格中的属性,您可以为它们执行相同的操作,而不是覆盖或遮蔽它们。

我不认为你可以删除它,因为它不是类属性而是设计时属性,只能由设计者使用:

如果您使用过Visual Studio的Whidbey版本,您可能已经注意到这个名为GenerateMember的新属性,该属性显示在属性网格中,用于添加到Windows窗体的所有控件和组件。 想知道它是什么? 它实际上是一个设计时扩展器属性,允许您控制添加到表单的组件是由类中的成员变量还是InitializeComponent中的局部变量引用。 默认情况下,它设置为true,但如果您有任何组件在InitializeComponent之外没有真正引用,则可以将其设置为false。 这样你就可以将类中的成员变量仅限制为你真正需要成员变量的组件 – 只是为了防止混乱。

同样适用于ModifiersLocked