1

在我们的应用程序中,我们有一个属性网格,用户可以使用它来编辑一些数据,有人告诉我,用户可以通过选项卡浏览的属性网格将是最有帮助的。所以我创建了一个属性网格,用户可以通过标签浏览所有数据。问题是,在他们浏览了所有数据之后,我希望下一个标签按到标签顺序中的下一个控件。

属性网格位于 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);
    }
4

2 回答 2

0

我认为您描述的行为不是 WinForm 控件的标准行为,ESC如果光标处理TAB. 否则,您必须实现像RaiseSomeEventToParentControl这样的东西,我认为这是不可能的或建议的。

于 2013-07-12T14:04:47.393 回答
0

如果您有任何疑虑,我已经尝试了一种解决方法并通过它并回复我。

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)
                {
                    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);
}
于 2013-07-12T14:34:53.077 回答