23

のカテゴリの並べ替えをカスタマイズするにはどうすればよいPropertyGridですか?

次のいずれかを設定すると...

propertyGrid.PropertySort = PropertySort.Categorized;
propertyGrid.PropertySort = PropertySort.CategorizedAlphabetical;

...その後、カテゴリはアルファベット順に並べられます。(「アルファベット順」は、各カテゴリ内のプロパティに適用されるようです。) を使用するPropertySort.NoSortと、カテゴリ化が失われます。

これは非常に簡単PropertyGridです。SelectObject

this.propertyGrid1.SelectedObject = options;

options適切に装飾されたプロパティを持つクラスのインスタンスです。

    [CategoryAttribute("Category Title"),
    DisplayName("Property Name"),
    Browsable(true),
    ReadOnly(false),
    BindableAttribute(true),
    DesignOnly(false),
    DescriptionAttribute("...")]
    public bool PropertyName {
        get {
            // ...
        }

        set {
            // ...
            this.OnPropertyChanged("PropertyName");
        }
    }

私は半ダースのカテゴリに数ダースのプロパティを持っています。

使いやすさを維持しながら、カテゴリの並べ替え順序を調整する方法はありますSelectedObjectか?

4

5 に答える 5

22

このリンクは役に立つと思います http://bytes.com/groups/net-c/21​​4456-q-ordering-sorting-category-text-propertygrid

これを行う方法があるとは思いません。これを実行できる可能性があることを示す唯一のものは、PropertySort プロパティです。none に設定すると、プロパティは型記述子から受け取った順序で表示されます。オブジェクトとプロパティ グリッドの間にプロキシ型記述子を作成できる場合があります。これにより、プロパティが正しい順序で返されるだけでなく、必要な順序でカテゴリを持つプロパティが返されます...

于 2009-06-15T10:43:33.883 に答える
17

@Marc Gravel が彼の答えで言ったように、フレームワークにはこの動作を許可するものは何もありません。どんな解決策もハックになります。そうは言っても、@ Shahab が彼の回答で提案した解決策を回避策として使用できますが、それはコードを維持している誰かに対するあなたの意図を実際に示すものではありません。したがって、あなたにできる最善の方法は、Attributeから継承しCategoryAttributeてプロセスを処理するカスタムを作成することだと思います。

public class CustomSortedCategoryAttribute : CategoryAttribute
{
    private const char NonPrintableChar = '\t';

    public CustomSortedCategoryAttribute(   string category,
                                            ushort categoryPos,
                                            ushort totalCategories)
        : base(category.PadLeft(category.Length + (totalCategories - categoryPos),
                    CustomSortedCategoryAttribute.NonPrintableChar))
    {
    }
}

その後、そのまま使用できます

[CustomSortedCategory("Z Category",1,2)]
public string ZProperty {set;get;}
[CustomSortedCategory("A Category",2,2)]
public string AProperty {set;get;}

PropertyGridUseCompatibletextRenderingプロパティをに設定trueして、印刷できない文字を削除し、またはにPropertySort設定してください。これで問題ありません。CategorizedCategorizedAlphabetical

于 2014-01-29T20:26:17.357 に答える
4

カテゴリを特定の(アルファベット順ではない)方法でソートする必要がある場合は、いいえ-それはできないと思います。VisualHintを試してみることをお勧めします-これが含まれていると思います(より多くの制御を取得できるため)。

于 2009-05-05T07:10:40.510 に答える