如何在重写进程 CmdKey 时检测 shift+tab

本文关键字:检测 shift+tab CmdKey 进程 重写 | 更新日期: 2023-09-27 17:57:00

所以我不得不覆盖ProcessCmdKey,以便在我的winform中检测按制表符。有关上下文,请参阅此问题。现在我成功地解决了我遇到的 Tab 键问题,我现在意识到我还需要检查 shift+tab 逻辑以允许用户向后移动。我似乎想不通。以下是我尝试过的一些方法,到目前为止还没有奏效。

    private bool isTab = false;
    private bool isShiftTab = false;
    private  StringBuilder ShiftTab = new StringBuilder();
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Tab)
        {
            isTab = true;
            ShiftTab.Append("Tab");
        }
        else
        {
            isTab = false;
        }
        if (keyData == Keys.Shift)
        {
            ShiftTab.Append("Shift");
        }
        if (ShiftTab.ToString() == "TabShift" || ShiftTab.ToString() == "ShiftTab")
        {
            isShiftTab = true;
        }
        if ((Control.ModifierKeys & Keys.Tab) != 0)
        {
           //code
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

如何在重写进程 CmdKey 时检测 shift+tab

我认为您必须像这样组合这两个键:

if (keyData == (Keys.Shift | Keys.Tab)) isShiftTab = true;

然后,您可以使用它跳过选项卡覆盖。

您可以使用逻辑或 |

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.LButton | Keys.Shift | Keys.Tab))
        {
            // your code to handle tab shift
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }