keys.Enter 和 keys.Tag 的按键事件
keydown event with keys.Enter and keys.Tag
我在我的表单的一页中使用了一些 richTextBoxes,在 richTextBoxes 的 keyDown 中,我写了如果按下 Ctrl+Enter,sendKeys Tab 键以便下一个获得焦点,我还有一个 keyDown 事件在整个表单上,所以当用户按 Ctrl+Tab 时,所选页面会切换到下一页
问题是,当我在 richTextBoxes 上按 Ctrl+Enter 时,使用 Ctrl+Tab 的表单的 keyDown 发生并且选项卡更改,为什么它看到 enter 和 tab 一样?
抱歉我的语法不好,谢谢你的努力
主窗体的keyDown事件:
private void Main_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab && e.Control)
{
//code for changing the tabs
}
}
richTextBoxes 的 keyDown 事件:
private void txtControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Enter)
{
SendKeys.Send("{Tab}");
e.Handled = true;
e.SuppressKeyPress = true;
}
}
通常,当您按下一个键时,获得焦点的控件会接收到按下的键。您可以稍微更改此流程,将 Form.KeyPreview
属性 设置为 True。使用此设置,窗体接收在获得焦点的控件之前按下的键。
在处理已到达 RichTextBox keydown 事件处理程序的 KeyDown 事件时,您试图插入伪造的 TAB 键,这 'normal' 流程弄乱了。您按下了 CTRL+ENTER 键,但是在事件结束时,表格收到了 TAB 键,并且控制位仍然设置,据我所知,没有简单的方法来重置该位,因此您在您的表单 keydown 中处理 CTRL+TAB。
幸运的是,所有这些都不需要,您只需使用
即可在 Tab 顺序行中设置下一个控件
private void txtControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Enter)
{
Control current = sender as Control;
this.SelectNextControl(current, true, true, true, true);
e.SuppressKeyPress = true;
}
}
调用表单方法 SelectNextControl 可以让您更好地控制应该发生的事情,并且不会在键盘处理中插入假的 TAB 键。
您在按键时发送制表符 SendKeys.Send("{Tab}");
。修饰符仍然是 CTRL。比焦点中的 MainForm 的 keydown 捕获 Tab。停止发送 SendKeys.Send("{Tab}");
?
我在我的表单的一页中使用了一些 richTextBoxes,在 richTextBoxes 的 keyDown 中,我写了如果按下 Ctrl+Enter,sendKeys Tab 键以便下一个获得焦点,我还有一个 keyDown 事件在整个表单上,所以当用户按 Ctrl+Tab 时,所选页面会切换到下一页 问题是,当我在 richTextBoxes 上按 Ctrl+Enter 时,使用 Ctrl+Tab 的表单的 keyDown 发生并且选项卡更改,为什么它看到 enter 和 tab 一样? 抱歉我的语法不好,谢谢你的努力 主窗体的keyDown事件:
private void Main_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab && e.Control)
{
//code for changing the tabs
}
}
richTextBoxes 的 keyDown 事件:
private void txtControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Enter)
{
SendKeys.Send("{Tab}");
e.Handled = true;
e.SuppressKeyPress = true;
}
}
通常,当您按下一个键时,获得焦点的控件会接收到按下的键。您可以稍微更改此流程,将 Form.KeyPreview
属性 设置为 True。使用此设置,窗体接收在获得焦点的控件之前按下的键。
在处理已到达 RichTextBox keydown 事件处理程序的 KeyDown 事件时,您试图插入伪造的 TAB 键,这 'normal' 流程弄乱了。您按下了 CTRL+ENTER 键,但是在事件结束时,表格收到了 TAB 键,并且控制位仍然设置,据我所知,没有简单的方法来重置该位,因此您在您的表单 keydown 中处理 CTRL+TAB。
幸运的是,所有这些都不需要,您只需使用
即可在 Tab 顺序行中设置下一个控件private void txtControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Enter)
{
Control current = sender as Control;
this.SelectNextControl(current, true, true, true, true);
e.SuppressKeyPress = true;
}
}
调用表单方法 SelectNextControl 可以让您更好地控制应该发生的事情,并且不会在键盘处理中插入假的 TAB 键。
您在按键时发送制表符 SendKeys.Send("{Tab}");
。修饰符仍然是 CTRL。比焦点中的 MainForm 的 keydown 捕获 Tab。停止发送 SendKeys.Send("{Tab}");
?