2009-05-05 121 views
19

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

私は、カテゴリがアルファベット順になります...以下...

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

のいずれかを設定した場合。 (「アルファベット順」は各カテゴリ内のプロパティに当てはまるようです)。私がPropertySort.NoSortを使用すると、カテゴリを失います。私は非常に簡単である、SelectObjectと私のPropertyGridを移入してい

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で私の使いやすさを維持しながらカテゴリのソート順を調整できる方法はありますか?

+0

[CodeProject:プロパティグリッドのアイテムの注文](http://www.codeproject.com/Articles/6611/Ordering-Items-in-the-Property-Grid)をご覧ください。 –

答えて

4

カテゴリを特定の(アルファベット順ではない)方法で並べ替えたい場合は、いいえ、私はあなたがそれを行うことはできないと思います。 VisualHintを試してみるといいかもしれません。

21

私は、このリンクが http://bytes.com/groups/net-c/214456-q-ordering-sorting-category-text-propertygrid

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

+9

それは最終的なトリックは純粋な悪の天才です;-p厄介ですが、それが仕事を完了したら.... –

+1

優れたトリック。しかし、\ tは視覚的な表示から削除され、並べ替えを制御することはできますが、実際にはプロパティ名を表示するための完全なスペースがないと考えるように、PropertyGridの自動ツールチップを混乱させるそうです。さらに悪いことに、ツールヒントは\ tを保持しているので、表示されるときに空白が多くなります。 – bsegraves

+2

ツールチップの問題は、これを行うことのメリットと比較して軽微です。ニースを見つける。 – snae

14

@Marc Gravelと同様に、his answerには、この動作を許可するフレームワークはありません。どんな解決策もハックになります。これで、あなたは回避策として@Shahabによって提案された解決策をhis answerで使うことができますが、それはあなたのコードを管理している誰にでもあなたの意図を示すものではありません。

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

としてそれを使用することができますちょうどあなたが設定してください:だから私はあなたができる最善のは、あなたのためのプロセスを処理するためにCategoryAttributeから継承するカスタムAttributeを作成していると思いますPropertyGridUseCompatibletextRenderingプロパティをtrueに印刷して、印刷できない文字を取り除き、CategorizedまたはCategorizedAlphabeticalに設定したPropertySortとするとよいでしょう。

3

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

関連する問題