其他分享
首页 > 其他分享> > 我如何使用Tab在winform属性网格的属性之间移动

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

作者:互联网

我在项目中使用Winform的PropertyGrid,一切正常,但按Tab键排序.

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

谢谢

解决方法:

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

在该方法中,首先找到内部PropertyGridView控件,该控件在Controls集合中的索引2处.然后使用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);
    }
}

标签:propertygrid,c,net,winforms
来源: https://codeday.me/bug/20191026/1939794.html