如何在 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
{
}
}