我需要设置属性网格的选定项目.我得到一个eventargs,它存储一个字符串(这个字符串告诉我用户想要选择的属性网格中的属性).问题是我找不到网格项的集合,我可以从中选择一个.而且我也不知道如何正确创建新的GridItem对象并设置SelectedGridItem属性.
GridItem gridItem = ???;
detailsPropertyGrid.SelectedGridItem = gridItem;
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
编辑:
它几乎正在工作,现在非常了解你.
GridItem gi = this.detailsPropertyGrid.EnumerateAllItems().First((item) =>
item.PropertyDescriptor != null &&
item.PropertyDescriptor.Name == colName);
this.detailsPropertyGrid.SelectedGridItem = gi;
this.detailsPropertyGrid.Select();
Run Code Online (Sandbox Code Playgroud)
唯一的问题是:现在它选择Property Name字段.我可以将焦点设置为属性的输入字段吗?
这里有几个PropertyGrid扩展,可以枚举网格中的所有项目.这是你如何使用它来选择一个项目:
// get GridItem for a property named "Test"
GridItem gi = propertyGrid1.EnumerateAllItems().First((item) =>
item.PropertyDescriptor != null &&
item.PropertyDescriptor.Name == "Test");
// select it
propertyGrid1.Focus();
gi.Select();
// enter edit mode
SendKeys.SendWait("{F4}");
...
public static class PropertyGridExtensions
{
public static IEnumerable<GridItem> EnumerateAllItems(this PropertyGrid grid)
{
if (grid == null)
yield break;
// get to root item
GridItem start = grid.SelectedGridItem;
while (start.Parent != null)
{
start = start.Parent;
}
foreach (GridItem item in start.EnumerateAllItems())
{
yield return item;
}
}
public static IEnumerable<GridItem> EnumerateAllItems(this GridItem item)
{
if (item == null)
yield break;
yield return item;
foreach (GridItem child in item.GridItems)
{
foreach (GridItem gc in child.EnumerateAllItems())
{
yield return gc;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5023 次 |
| 最近记录: |