从Visual Studio中的“属性”窗格中删除属性

时间:2012-06-05 20:59:39

标签: c# visual-studio-2010

是否可以从Visual Studio的“属性”窗格中删除表单属性或属性集?

Backstory:我已经制作了一些继承常见表单属性的UserControls,但是我想从Visual Studio的Properties窗格中删除“Anchor”和“Dock”属性,因为UserControl将使用不同的大小调整逻辑,锚定和对接似乎不支持的逻辑。

我认为这是某种注释,但我不完全确定,而且我无法在Google上找到任何内容。

提前致谢!

4 个答案:

答案 0 :(得分:3)

您想要的属性是Browsable http://msdn.microsoft.com/en-us/library/system.componentmodel.browsableattribute.browsable.aspx 在这些用户控件上覆盖Dock和Anchor,向它们添加该属性(带有“false”值)并查看是否有效(确保重新编译以便设计者加载更改)

答案 1 :(得分:3)

尝试将Browsable属性添加到属性中:

using System.ComponentModel;

[Browsable(false)]
public override AnchorStyles Anchor {
  get {
    return base.Anchor;
  }
  set {
    base.Anchor = value;
  }
}

答案 2 :(得分:1)

如果您不想覆盖属性,可以使控件实现ICustomTypeDescriptor,以便控制属性网格中显示的内容。为此,您可以为返回将其实现委托给标准实现(TypeDescriptor的静态方法)的属性分别实现每个方法。这些方法的实施应如下:

public String GetClassName()
{
    return TypeDescriptor.GetClassName(this,true);
}

public AttributeCollection GetAttributes()
{
    return TypeDescriptor.GetAttributes(this,true);
}

public String GetComponentName()
{
    return TypeDescriptor.GetComponentName(this, true);
}

public TypeConverter GetConverter()
{
    return TypeDescriptor.GetConverter(this, true);
}

public EventDescriptor GetDefaultEvent() 
{
    return TypeDescriptor.GetDefaultEvent(this, true);
}

public PropertyDescriptor GetDefaultProperty() 
{
    return TypeDescriptor.GetDefaultProperty(this, true);
}

public object GetEditor(Type editorBaseType) 
{
    return TypeDescriptor.GetEditor(this, editorBaseType, true);
}

public EventDescriptorCollection GetEvents(Attribute[] attributes) 
{
    return TypeDescriptor.GetEvents(this, attributes, true);
}

public EventDescriptorCollection GetEvents()
{
    return TypeDescriptor.GetEvents(this, true);
}

public object GetPropertyOwner(PropertyDescriptor pd) 
{
    return this;
}

必须实现的方法是GetProperties。它返回一个PropertyDescriptionCollection,在你的情况下,它应该包含你要隐藏的每个PropertyDescriptor。像这样:

public PropertyDescriptorCollection GetProperties() 
{
    pdColl = new PropertyDescriptorCollection(null);

    foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(this))
        if (pd.Name != "Dock" && pd.Name != "Anchor")
            pdColl.Add(pd);
    return pdColl;
}

答案 3 :(得分:0)

覆盖属性并将Browsable属性设置为false。

[Browsable(false)]
public override AnchorStyles Anchor
{
    get
    {
        return AnchorStyles.None;
    }
    set
    {
       // maybe throw a not implemented/ don't use message?
    }
}

[Browsable(false)]
public override DockStyle Dock
{
    get
    {
        return DockStyle.None;
    }
    set
    {

    }
}