我创建了一个Button后代,我隐藏了所有不使用的属性。
我这样做:
[Browsable(false)]
[Bindable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Obsolete("", true)]
public new Boolean AllowDrop { get; set; }
大多数属性都被正确隐藏,无法使用。
然而,有两个属性是我无法摆脱的。
有没有办法在Designer中删除GenerateMember和Modifiers?
答案 0 :(得分:3)
您可以为控件创建新的ControlDesigner
并覆盖其PostFilterProperties
方法。该方法允许您更改或删除属性字典中的项目。
属性字典中的键是属性的名称。虽然Modifiers
和GenerateMember
不是您控件的实际属性,但它们是设计时属性,但您可以通过以下方式删除它们:
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");
}
}
要隐藏属性网格中的属性,您可以为它们执行相同的操作,而不是覆盖或遮蔽它们。
答案 1 :(得分:0)
我认为您不能删除它,因为它不是类属性而是设计时属性,仅供设计人员使用:
如果你玩过Visual Studio的Whidbey版本,你可能会有 注意到这个名为GenerateMember的新属性出现在 添加到Windows的所有控件和组件的属性网格 形成。想知道它是什么?这实际上是一个设计时间 扩展器属性,允许您控制是否添加组件 表单由类中的成员变量或本地引用 InitializeComponent中的变量。默认情况下,它设置为true,但是如果 你有任何你没有真正引用的组件 InitializeComponent,您可以将其设置为false。那样你就可以限制了 类中的成员变量只能用于您真正的组件 需要成员变量 - 只是为了防止混乱。
同样适用于Modifiers
和Locked
。
答案 2 :(得分:0)
有点题外话。主要针对那些正在努力禁用“停靠在父容器中”属性的用户。 以下覆盖对我有帮助:
protected override void PostFilterAttributes(IDictionary attributes)
{
base.PostFilterAttributes(attributes);
var oDockingAttribute = attributes.Values.OfType<DockingAttribute>().FirstOrDefault();
var oNoDockingAttribute = new DockingAttribute(DockingBehavior.Never);
if (oDockingAttribute != null) attributes[oDockingAttribute.TypeId] = oNoDockingAttribute;
}