C#选择CategorizedAlphabetical排序的ProperyGrid中的第一行

时间:2011-07-02 12:06:17

标签: c# select propertygrid

我有ProperyGrid加载了分类的PropertySpec并设置为CategorizedAlphabetical排序。当表单运行类别时,类别中的项目将被排序。令人讨厌的假象是PropertyGrid默认选择列表排序后的第一个项目,有时它会将视图滚动到选择。如果项目列表很长,您最终会看到列表滚动到中间的某个位置。

由于可以在运行时创建PropertySpec,我希望始终在表单加载时显示列表的顶部。 PropertyGrid不会“轻易”公开集合,当然也不会按顺序排列。谷歌搜索后,我相信这是不可能的?

1 个答案:

答案 0 :(得分:4)

我提出了下面的代码,证明不是这样。

Snippet将选择第一类排序列表。也可以选择该类别中的第一项扩展方法,但我的需求是不必要的。

// 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();而不是循环并检查每个项目。如果你想使用那个快捷方式,那么你必须断言列表不是空的,但这样可以提高性能......