2012-12-02 5 views
7

は、私はクラスの例については、Person実行時にプロパティグリッドに表示される内容をどのように制御しますか?

[TypeConverter(typeof(ExpandableObjectConverter))] 
public class Person 
{ 
    public bool ShowHidden { get; set; } 
    public string Name { get; set; } 
    //[Browsable(false)] 
    public string Hidden { get; set; } 

    public override string ToString() 
    { 
     return string.Format("Person({0})", Name); 
    } 
} 

は疑問が私は、実行時にBrowsable()属性をどのように制御しないと、リストを表示するプロパティグリッドを有するようShowHidden = falseHiddenライン(以下、黄色の強調表示)を省略したときに。

Screenshot

感謝。ここで

答えて

10

は一例です:

PropertyDescriptor descriptor= 
    TypeDescriptor.GetProperties(this.GetType())["DataType"]; 
BrowsableAttribute attrib= 
    (BrowsableAttribute)descriptor.Attributes[typeof(BrowsableAttribute)]; 
FieldInfo isBrow = 
    attrib.GetType().GetField("browsable",BindingFlags.NonPublic | BindingFlags.Instance); 
isBrow.SetValue(attrib,false); 

はちょうどあなたのプロパティ名とDataTypeを交換してください。 注意:すべてのプロパティで属性を変更する必要があります(この場合はBrowsable)。プロパティの1つに属性がない場合は、すべてのクラスプロパティのが新しい属性設定を取得します。

コードはExploring the Behaviour of Property Gridから取得しました。

+0

ヒントをお寄せいただきありがとうございます。私はまだそれを働かせていない。このスニペットに最適な配置が何であるかわかりません。私はプロパティ設定でそれを持っていますが、グリッドには影響しません。 – ja72

+0

私が期待したのは、 'ShowHidden = false'を持つインスタンスの行だけを削除することでしたが、すべてのインスタンスから行を削除しました。私はそれが私が必要なものをしたように答えを受け入れるだろう。 – ja72

+2

コードでBrowsableAttributeが変更されましたが、グリッドの変更が表示されません...どのように変更のランタイムが表示されますか? – FrancescoDS

関連する問題