-->

我怎样才能的KeyDown确定Shift + Tab键被按下(How can I determine

2019-09-18 08:42发布

我怎样才能的KeyDown确定⇧+ Tab键被按下。

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

不能工作,因为从来没有这两个键在同一秒按下完全相同。 你总是在第一移位,然后其他的..

Answer 1:

它不能正常工作,因为从来没有这两个键在同一秒按下完全相同。

你说的没错,你的代码不工作,但你的理由是错误的。 问题是,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);
    }
}


Answer 2:

如果你正在寻找一个按键组合(表,然后按住Shift键)如Ctrl K + d,你将不得不使用它是取自此修改示例MSDN社会 。

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);
}


Answer 3:

第一钩的标签按键事件,然后在活动期间,检查Shift键的状态。 请记住,有两个shift键; 请务必检查他们两个。

这非常相关的职位说明如何检查修改键的状态:

如何检测当前按键?

编辑:另一个回答者谁应该得到公正的给予好评提供的见解是,Tab键的默认行为(变更控制焦点)必须被抑制。



Answer 4:

你可以找到你的答案在这个岗位



Answer 5:

这很简单。

你可以做的是,在文本框使用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
        {

        }
    }


Answer 6:

这很简单。

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
    {

    }
}


文章来源: How can I determine in KeyDown that Shift + Tab was pressed