重写ProcessCmdKey时如何检测shift + tab

时间:2014-04-04 22:05:24

标签: c# .net winforms override keypress

所以我必须覆盖ProcessCmdKey才能检测我的winform中的Tab键。有关上下文,请参阅this问题。既然我已经成功修复了Tabing问题,我现在意识到我还需要检查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);
    }

2 个答案:

答案 0 :(得分:6)

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

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

然后您可以使用它来跳过标签覆盖。

答案 1 :(得分:3)

您可以使用逻辑或|

组合键的值
    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);
    }