9

クラスなどのリストを表示するプロパティ グリッドがあります。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

スクリーンショット

ありがとう。

4

1 に答える 1

15

次に例を示します。

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 Behavior of Property Grid

于 2012-12-02T20:02:57.243 に答える