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

StackOverflow https://stackoverflow.com/questions/823327

  •  05-07-2019
  •  | 
  •  

質問

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

以下のいずれかを設定すると…

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

...カテゴリはアルファベット順に並べられます。(「アルファベット順」は各カテゴリ内のプロパティに適用されるようです。) PropertySort.NoSort, カテゴライズを失います。

私は自分のデータを入力しています PropertyGridSelectObject, これは非常に簡単です。

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");
        }
    }

6 つのカテゴリーに数十の物件があります。

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

役に立ちましたか?

解決

カテゴリを特定の(アルファベット順ではない)方法でソートしたい場合は、いいえ-それができるとは思いません。 VisualHint を試してみたいと思うかもしれません。より多くのコントロールをつかむ)。

他のヒント

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

これを行う方法はないと思います。歌詞の意味: 私ができる唯一のこと これができる可能性があることを示すのは、PropertySortです 財産。none に設定すると、プロパティが表示されます 型記述子から受信した順序で。あなたはそうかもしれません オブジェクトと propertygridは、正しい order ですが、カテゴリを持つプロパティは必要な順序で表示されます それらで...

@Marc Gravelが彼の答えで言ったように、この動作を許可するフレームワークには何もありません。すべてのソリューションはハックになります。そうは言っても、回避策として彼の回答で@Shahabによって提案されたソリューションを使用できますが、それはしませんあなたのコードを保守している人にあなたの意図を本当に示してください。したがって、できることは、 CategoryAttribute を継承してプロセスを処理するカスタム Attribute を作成することだと思います:

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;}

PropertyGrid UseCompatibletextRendering プロパティを true に設定して、印刷不可能な文字を削除し、< code> PropertySort を Categorized または CategorizedAlphabetical に設定すると、準備完了です。

上記の '\ t'トリックの小さなバリエーションで、代わりにキャリッジリターン文字( '\ r')で試しました。動作しているようで、タブによって生じる余分なスペースに起因するツールチップの問題を回避します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top