如何在按键中确定按下了 Shift + Tab

  • 本文关键字:Shift Tab c# winforms keydown
  • 更新时间 :
  • 英文 :


如何在 KeyDown 中确定按下了 + Tab

private void DateTimePicker_BirthDate_KeyDown(object sender, KeyEventArgs e)
{
   if (e.KeyCode == Keys.Tab && e.Modifiers == Keys.Shift)
   {
       //do stuff
   }
}

无法工作,因为永远不会在同一秒内完全按下两个键。你总是首先是 Shift,然后是另一个。

它不起作用,因为永远不会在同一秒内完全按下两个键。

你是对的,你的代码不起作用,但你的理由是错误的。问题是 Tab 键具有特殊含义 - 它会导致焦点更改。不会调用事件处理程序。

如果使用其他键而不是 Tab,则代码将正常工作。


如果确实要更改某个特定控件的 Shift + Tab 的行为,可以通过重写ProcessCmdKey来完成,但请记住,许多用户使用 Tab 键在窗体中导航,更改此键的行为可能会惹恼这些用户。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (DateTimePicker_BirthDate.Focused && keyData == (Keys.Tab | Keys.Shift))
    {
        MessageBox.Show("shift + tab pressed");
        return true;
    }
    else
    {
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

如果您正在寻找像Ctrl K + D这样的按键组合(Tab,然后Shift),则必须使用这个修改后的示例,该示例取自MSDN social。

private StringBuilder _pressedKeys = new StringBuilder();
private void DateTimePicker_BirthDate_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Tab)
    {
        _pressedKeys.Append("Tab");
        return;
    }
    if (e.Modifiers == Keys.Shift)
    {
        _pressedKeys.Append("Shift");
        return;
    }
    if (_pressedKeys.ToString()."TabShift")
    {
        MessageBox.Show("It works!");
         _pressedKeys.Clear();
    }
    else
    {
         _pressedKeys.Clear();
    }
    base.OnKeyDown(e);
}
首先挂钩

Tab 键按下事件,然后在事件期间检查 Shift 键的状态。 请记住,有两个 shift 键;确保同时检查它们。

这篇非常相关的帖子展示了如何检查修饰键的状态:

如何检测当前按下的键?

编辑:另一位理应获得赞成票的回答者提供的见解是,必须禁止 Tab 键的默认行为(更改控件焦点)。

您可以在以下位置找到答案这篇文章

很简单

您可以使用文本框中的 KeyUp 事件执行此操作

    private void txtBox1_KeyUp(object sender, KeyEventArgs e)
    {               
        if (e.KeyCode == Keys.Tab && e.Shift == false) // TAB Key Pressed
        {
        }
        if (e.KeyCode == Keys.Tab && e.Shift == true) // TAB + SHIFT Key Pressed
        {
        }
    }

    Or
    Using this you can identify Any Key is press inside the form
    //Add This code inside the Form_Load Event
    private void Form1_Load(object sender, EventArgs e)
    {
    this.KeyUp += new System.Windows.Forms.KeyEventHandler(KeyPressEvent);
    this.KeyPreview = true;
    }
    //Create this Custom Event
    private void KeyPressEvent(object sender, KeyEventArgs e) 
    {
        if (e.KeyCode == Keys.Tab && e.Shift == false) // TAB Key Pressed
        {
        }
        if (e.KeyCode == Keys.Tab && e.Shift == true) // TAB + SHIFT Key Pressed
        {
        }
    }
很简单

Using this you can identify Any Key is press inside the form
//Add This code inside the Form_Load Event
private void Form1_Load(object sender, EventArgs e)
{
    this.KeyUp += new System.Windows.Forms.KeyEventHandler(KeyPressEvent);
    this.KeyPreview = true;
}
//Create this Custom Event
private void KeyPressEvent(object sender, KeyEventArgs e) 
{
    if (e.KeyCode == Keys.Tab && e.Shift == false) // TAB Key Pressed
    {
    }
    if (e.KeyCode == Keys.Tab && e.Shift == true) // TAB + SHIFT Key Pressed
    {
    }
}

最新更新