首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PropertyGrid:隐藏基类属性,如何隐藏?

PropertyGrid:隐藏基类属性,如何隐藏?
EN

Stack Overflow用户
提问于 2011-08-14 09:32:01
回答 2查看 10.8K关注 0票数 7

PropertyGrid...对于用户,我只想留下其中的几个。但是现在我看到了所有的东西,当用户看到像Dock或Cursor之类的东西时会感到困惑。希望现在清楚了……

EN

回答 2

Stack Overflow用户

发布于 2011-08-14 09:35:33

使用此属性:

代码语言:javascript
运行
复制
[Browsable(false)]
public bool AProperty {...} 

对于继承的属性:

代码语言:javascript
运行
复制
[Browsable(false)]
public override bool AProperty {...} 

另一个想法(因为您试图隐藏所有基类成员):

代码语言:javascript
运行
复制
public class MyCtrl : TextBox
{
  private ExtraProperties _extraProps = new ExtraProperties();

  public ExtraProperties ExtraProperties
  {
    get { return _extraProps; }
    set { _extraProps = value; }
  }
}

public class ExtraProperties
{
  private string _PropertyA = string.Empty;

  [Category("Text Properties"), Description("Value for Property A")]
  public string PropertyA {get; set;}

  [Category("Text Properties"), Description("Value for Property B")]
  public string PropertyB { get; set; }
}

然后对于您的属性网格:

代码语言:javascript
运行
复制
  MyCtrl tx = new MyCtrl();
  pg1.SelectedObject = tx.ExtraProperties;

缺点是它将您对这些属性的访问级别从

代码语言:javascript
运行
复制
tx.PropertyA = "foo";

代码语言:javascript
运行
复制
tx.ExtraProperties.PropertyA = "foo";
票数 12
EN

Stack Overflow用户

发布于 2011-08-14 09:39:58

若要隐藏MyCtrl属性,请在该属性上使用[Browsable(False)]属性。

代码语言:javascript
运行
复制
[Browsable(false)]
public bool AProperty { get; set;}

要隐藏可浏览继承的属性,需要覆盖基本属性并应用可浏览属性。

代码语言:javascript
运行
复制
[Browsable(false)]
public override string InheritedProperty  { get; set;}

注意:根据具体情况,您可能需要添加virtualnew关键字。

更好的方法是使用ControlDesigner。设计器有一个名为PreFilterProperties的重写,可用于向PropertyGrid提取的集合中添加额外的属性。

代码语言:javascript
运行
复制
Designer(typeof(MyControlDesigner))]
public class MyControl : TextBox
{
    // ...
}

public class MyControlDesigner : ...
{
    // ...

    protected override void PreFilterProperties(
                             IDictionary properties) 
    {
        base.PreFilterProperties (properties);

        // add the names of proeprties you wish to hide
        string[] propertiesToHide = 
                     {"MyProperty", "ErrorMessage"};  

        foreach(string propname in propertiesToHide)
        {
            prop = 
              (PropertyDescriptor)properties[propname];
            if(prop!=null)
            {
                AttributeCollection runtimeAttributes = 
                                           prop.Attributes;
                // make a copy of the original attributes 

                // but make room for one extra attribute

                Attribute[] attrs = 
                   new Attribute[runtimeAttributes.Count + 1];
                runtimeAttributes.CopyTo(attrs, 0);
                attrs[runtimeAttributes.Count] = 
                                new BrowsableAttribute(false);
                prop = 
                 TypeDescriptor.CreateProperty(this.GetType(), 
                             propname, prop.PropertyType,attrs);
                properties[propname] = prop;
            }            
        }
    }
}

您可以将您希望隐藏的属性的名称添加到propertiesToHide中,这样可以进行更清晰的分隔。

到期日:http://www.codeproject.com/KB/webforms/HidingProperties.aspx#

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7054408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档