按下箭头键跳转组合框

问题描述:

当我按下向上/向下箭头对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); 
    } 
} 
+0

太棒了,谢谢你的解释。有用!我将使用这种方法来处理每个这样的控制(双输入,整数输入)。 –

必须KeyPreview属性设置您的形式true

所以你的形式确定是否为它控制键盘事件与形式注册