C#从自定义属性网格转到选项卡顺序中的下一个控件

本文关键字:顺序 下一个 控件 选项 自定义属性 网格 | 更新日期: 2023-09-27 18:22:10

在我们的应用程序中,我们有一个属性网格,用户可以使用它来编辑一些数据,我被告知用户可以通过选项卡查看的属性网格将非常有用。因此,我创建了一个属性网格,用户可以通过它浏览所有数据。问题是,在他们浏览完所有数据后,我希望下一次按tab键转到选项卡顺序的下一个控件。

属性网格位于选项卡顺序的中间。我试图调整这里的解决方案:验证文本框文本和增加标签顺序一次,但没有成功。

属性网格中如何处理选项卡的代码:

    protected override bool ProcessKeyPreview(ref Message m)
    {
        int wParam = m.WParam.ToInt32();
        switch (m.Msg)
        {
            case WM_KEYDOWN:
                {
                    if (wParam == SHIFT)
                    {
                        isShiftDown = true;
                        return true;
                    }
                }
                break;
            case WM_KEYUP:
                {
                    if (wParam == TAB)
                    {
                        moveSelectedGridItem(!isShiftDown);
                        return true;
                    }
                    else if (wParam == SHIFT)
                    {
                        isShiftDown = false;
                        return true;
                    }
                }
                break;
        }
        return ProcessKeyEventArgs(ref m);
    }

C#从自定义属性网格转到选项卡顺序中的下一个控件

我已经尝试了一种变通方法,如果您有任何问题,请仔细查看并回复我。

protected override bool ProcessKeyPreview(参考消息m){int wParam=m.wParam.ToInt32();

    switch (m.Msg)
    {
        case WM_KEYDOWN:
            {
                if (wParam == SHIFT)
                {
                    isShiftDown = true;
                    return true;
                }
            }
            break;
        case WM_KEYUP:
            {
                if (wParam == TAB)
                {
                    bool ismoved = moveSelectedGridItem(!isShiftDown);
                     // First: modify the method "moveSelectedGridItem" to return bool value (if grid moved: true, if TAB pressed after last grid item: false)
                    if(!ismoved)
                        // handle your implementaion here
                    return true;
                }
                else if (wParam == SHIFT)
                {
                    isShiftDown = false;
                    return true;
                }
            }
            break;
    }
    return ProcessKeyEventArgs(ref m);
}

我认为您所描述的行为不是WinForm控件的标准行为,通常情况下,如果光标在处理TAB的控件"内部",则用户必须在迭代到下一个控件之前按ESC。否则,您必须实现RaiseSomeEventToParentControl之类的东西,我认为不可能或不建议这样做。