3

使用する

<System.ComponentModel.TypeConverter(GetType(System.ComponentModel.ExpandableObjectConverter))> _

いくつかのプロパティで構成されるクラス (別のクラスのプロパティ) の宣言。

このクラスのインスタンスを単純にロードします...

PropertyGrid1.SelectedObject = oColumn

明らかに、コードでプロパティグリッドを手動で構築したくありません。その方法は知っています。

しかし、ここに問題があります。プロパティの値によっては、他の特定のプロパティが表示されないようにする必要があります。

<System.ComponentModel.Browsable(False)> _

プロパティ宣言の属性。

プロパティグリッドのすべての構築を手動で処理することなく、プログラムでこれを行う方法はありますか>

4

4 に答える 4

16

実際、これは完全に可能です。最初の最も簡単な方法は、グリッドの BrowsableAttributes プロパティを設定することです。

propGraph.BrowsableAttributes = new AttributeCollection(
    new Attribute[] 
    { 
        new CategoryAttribute("Appearance")
    });

これにより、指定した属性タイプに一致しないすべてのプロパティが除外されます。残念ながら、これは否定的なフィルターではなく肯定的なフィルターであるため、IMHO の有用性は低くなります。

次に、同様に簡単に、PropertyGrid に表示するオブジェクトの周りに単純なラッパーを作成し、非表示にするプロパティなどを再定義できます。パススルー プロパティとして:

public class MyDerivedControl : public TextBox
{
    [Browsable(false)]
    [Category("MyCustomCategory")]
    public new bool Enabled
    {
         get { return base.Enabled }
         set { base.Enabled = value; }
    }
}

これをプロパティ グリッドにポップすると、Enabled プロパティが非表示になります。

第 3 に、PropertyGrid 自体をカスタマイズして、型記述子などの世界に入ることができますが、いくつかのプロパティを非表示にするだけの場合、これはやり過ぎです。

お役に立てれば。

于 2009-07-31T01:40:02.007 に答える
1

gridItem.Hide() を期待していた場合、答えはノーです。MS PropertyGrid でこれを実現する唯一の方法は、TypeConverter またはカスタム型記述子 (ICustomTypeDescriptor を実装する) の GetProperties メソッドを使用してプロパティを動的に公開することです。最初に TypeConverter を試してみます (特に、チェックしたいプロパティ値が同じレベルにある場合)。コーディングは少なくて済みます。

于 2009-03-10T14:22:21.410 に答える
-2

この質問は似ていますが、回答はより完全です。相互参照したい人もいるでしょう。

于 2010-07-15T21:35:31.417 に答える