按下箭头键跳转组合框
问题描述:
当我按下向上/向下箭头对tabstop属性设置为true的每个控件,然后选择PREVOIUS/NEXT tabindex。它工作正常,但当组合框是集中它更改它的值导致它被困箭头了。按下箭头键跳转组合框
如何在不将按键发送到ComboBox的情况下实现tabindex跳转?它处理的tabindex跳
代码:
private void ParentForm_KeyDown(object sender, KeyEventArgs e)
{
Control ctl;
ctl = (Control)sender;
if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Enter)
{
ctl.SelectNextControl(ActiveControl, true, true, true, true);
}
else if (e.KeyCode == Keys.Up)
{
ctl.SelectNextControl(ActiveControl, false, true, true, true);
}
}
答
你不能用KeyPreview或表单的KeyDown事件来做到这一点。这是VB6的遗留问题,导航键在他们解雇KeyDown之前被拦截。您必须改写表单的ProcessCmdKey()方法。
通过这种方式解决问题通常是相当丑陋的,它是一个局部问题的全局解决方案。当你这样做时,你会破坏其他控件,比如RichTextBox或者多行文本框,例如,让你的用户完全陷入为什么他们行为不端。更简洁的方法是创建您自己的ComboBox控件,该控件不会吞下光标键。为您的项目添加一个新类并粘贴下面显示的代码。编译。从工具箱的顶部放下新的控件,替换现有的组合。
using System;
using System.Windows.Forms;
class MyComboBox : ComboBox {
protected override bool IsInputKey(Keys keyData) {
if ((keyData == Keys.Up) || (keyData == Keys.Down)) return false;
return base.IsInputKey(keyData);
}
}
答
必须KeyPreview
属性设置您的形式true
所以你的形式确定是否为它控制键盘事件与形式注册
太棒了,谢谢你的解释。有用!我将使用这种方法来处理每个这样的控制(双输入,整数输入)。 –