如何使用 Tab 在 winform 属性网格的属性之间移动

本文关键字:属性 网格 之间 移动 winform 何使用 Tab | 更新日期: 2023-09-27 17:57:11

我在我的项目中使用了Winform的PropertyGrid,它工作正常,但Tab顺序。

我想在点击 Tab 时切换到下一个属性,但实际上,选择从属性网格移动到下一个控件。我无法弄清楚如何完成这项工作?

谢谢

如何使用 Tab 在 winform 属性网格的属性之间移动

我们应该深入研究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);
    }
}