我正在尝试检测 TextBox
中的 Tab 键按下。
我知道 Tab 键不会触发 KeyDown
、KeyUp
或 KeyPress
事件。我在网上找到:Detecting the Tab Key in Windows Forms of BlackWasp。
他们建议覆盖我所做的 ProcessCmdKey,但它也没有被触发。
是否有可靠的方法来检测 Tab 键按下?
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
bool baseResult = base.ProcessCmdKey(ref msg, keyData);
if (keyData == Keys.Tab && textBox_AllUserInput.Focused)
{
MessageBox.Show("Tab key pressed.");
return true;
}
if (keyData == (Keys.Tab | Keys.Shift) && textBox_AllUserInput.Focused)
{
MessageBox.Show("Shift-Tab key pressed.");
return true;
}
return baseResult;
}
根据Cody Gray的建议,我修改了如下代码:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Tab && textBox_AllUserInput.Focused)
{
MessageBox.Show("Tab key pressed."); }
if (keyData == (Keys.Tab | Keys.Shift) && textBox_AllUserInput.Focused)
{
MessageBox.Show("Shift-Tab key pressed."); }
return base.ProcessCmdKey(ref msg, keyData);
}
问题是它没有捕获 Tab 键按下。
最佳答案
某些按键,例如 TAB、RETURN、ESC 和箭头键,通常会被某些控件忽略,因为它们是不考虑输入按键。
你可以处理PreviewKeyDown
您的控件事件来处理这些击键并将它们设置为输入键。
private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if(e.KeyData == Keys.Tab)
{
MessageBox.Show("Tab");
e.IsInputKey = true;
}
if (e.KeyData == (Keys.Tab | Keys.Shift))
{
MessageBox.Show("Shift + Tab");
e.IsInputKey = true;
}
}
关于c# - 检测 TextBox 中的 Tab 键按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35914536/