我在我的项目中使用Winform的PropertyGrid
,这一切都运行正常但是标签顺序。
当我点击 Tab 时,我想切换到下一个属性,但事实上,选择移出属性网格到下一个控件。我无法弄清楚如何完成这项工作?
由于
答案 0 :(得分:4)
我们应该深入研究PropertyGrid
的内部部分,然后我们可以更改控件的默认 Tab 行为。在开始时,我们应该创建派生PropertyGrid
并覆盖其ProcessTabKey
方法。
在该方法中,首先找到Controls
集合中索引2处的内部PropertyGridView
控件。然后使用Reflection
获取其allGridEntries
字段,该字段是包含所有GridItem
元素的集合。
找到所有网格项后,在集合中找到SelectedGridItem
的索引并检查它是否不是最后一项,按索引获取下一项并使用Select
方法选择它该项目。
using System.Collections;
using System.Linq;
using System.Windows.Forms;
public class ExPropertyGrid : PropertyGrid
{
protected override bool ProcessTabKey(bool forward)
{
var grid = this.Controls[2];
var field = grid.GetType().GetField("allGridEntries",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
var entries = (field.GetValue(grid) as IEnumerable).Cast<GridItem>().ToList();
var index = entries.IndexOf(this.SelectedGridItem);
if (forward && index < entries.Count - 1)
{
var next = entries[index + 1];
next.Select();
return true;
}
return base.ProcessTabKey(forward);
}
}