2011-07-02 8 views
1

ProperyGridに分類されたPropertySpecがロードされ、CategorizedAlphabeticalソートに設定されています。フォームがカテゴリを実行すると、カテゴリ内のアイテムがソートされます。厄介な人工物は、PropertyGridはデフォルトでリストがソートされた後の最初の項目を選択し、時にはビューを選択範囲にスクロールすることです。アイテムリストが長い場合は、中央のどこかにスクロールされたリストを見ることになります。C#分類されたアルファベット順の最初の行を選択するProperyGrid

実行時にPropertySpecを作成できるので、フォームの読み込み時に常にリストの先頭を表示する必要があります。 PropertyGridは、コレクションを「簡単に」公開することはなく、確かに順序付けられた順序ではありません。私は周りのグーグルでこれが可能ではないと信じてリードですか?

答えて

3

私は以下のコードを思いつきませんでした。

スニペットはソートリストの第1カテゴリを選択します。そのカテゴリで最初の項目を選択することもできますが、私のニーズは不必要でした。

// bind the PropertyTable to PropertyGrid 
this.pg_Prefs.SelectedObject = proptable; 

// get selected item 
GridItem gi = this.pg_Prefs.SelectedGridItem; 
// get category for selected item 
GridItem pgi = gi.Parent.Parent; 

//sort categories 
List<GridItem> sortedCats = new List<GridItem>(pgi.GridItems.Cast<GridItem>()); 
sortedCats.Sort(delegate(GridItem gi1, GridItem gi2) { return gi1.Label.CompareTo(gi2.Label); }); 

// loop to first category 
for (int i = 0; i < pgi.GridItems.Count; i++) 
{ 
    if (pgi.GridItems[i] == gi) break; // in case full circle done 
    // select if first category 
    if (pgi.GridItems[i].Label == sortedCats[0].Label) 
    { 
     pgi.GridItems[i].Select(); 
     break; 
    } 
} 

これは他の人にも役立ちます。

リストを並べ替えると実際にカテゴリを選択する簡単な方法は、ループして各アイテムをチェックするのではなく、sortedCats[0].Select();になります。あなたはそのショートカットを使用したいが、それはいくつかのパフォーマンスの向上を与えるだろう場合は、リストが空ではないと主張する必要があります...

関連する問題