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

How do I use Tab to move between properties of winform property grid

我在我的项目中使用 Winform 的 PropertyGrid,一切正常,但 Tab 键顺序。

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

谢谢

我们应该深入研究 PropertyGrid 的内部部分,然后我们可以更改控件的默认 Tab 行为。一开始我们应该创建一个派生的 PropertyGrid 并覆盖它的 ProcessTabKey 方法。

在方法中,首先找到内部的PropertyGridView control which is at index 2 in Controls collection. Then using Reflection get its allGridEntries field which is a collection containing all GridItem个元素。

找到所有网格项目后,找到项目的SelectedGridItem in the collection and check if it's not the last item, get the next item by index and select it using 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);
    }
}