原因:首先你是通过什么事件来捕捉Enter键的,如果你用了form的keydown,ComboBox又设为可以入力的,你按Enter键是不触发form的keydown事件的,如果在ComboBox的keydown里捕捉就会[Combobox中选择的内容仍然是高亮显示]
结果:
在form里覆盖ProcessCmdK的方法(用它来捕捉Enter)
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{

if (msg.Msg == 0x100 || msg.Msg == 0x104) 
{
   if(keyData == Keys.Enter || keyData == Keys.Escape)
  {  
NextFocus next = new NextFocus();
next.MoveEnter(this,keyData,null);
return true;
   }}
return base.ProcessCmdKey(ref msg, keyData);}

解决方案 »

  1.   

    MoveEnter()里用form的SelectNextControl(form.ActiveControl, true, true, true, true) ;来控制焦点
      

  2.   

    是在ComboBox的keydown里捕捉的,请问NextFocus属于哪个命名空间?
      

  3.   

    我写的代码如下,请各位帮我想想办法:
    private void UserControl1_Load(object sender, System.EventArgs e) {
    DealwithEvent();
    } private void DealwithEvent(){
    foreach(Control con in this.Controls){
    if(con.CanSelect == true){
    con.KeyDown += new KeyEventHandler(con_KeyDown);
    }
    }
    } private void con_KeyDown(object sender, KeyEventArgs e) {
    if(e.KeyCode == Keys.Enter){
    //查找下一个可选控件
    Control con = sender as Control; if(con.GetType().Equals(typeof(System.Windows.Forms.ComboBox))){
    ComboBox cb = con as ComboBox;



    } int tabIndex = con.TabIndex;
    ArrayList tabIndexs = new ArrayList();
    foreach(Control tempCon in this.Controls){
    if(tempCon.CanSelect == true){
    if(tempCon.TabIndex > tabIndex){
    tabIndexs.Add(tempCon.TabIndex);
    }
    }
    } if(tabIndexs.Count > 0 ){
    int minIndex = (int)tabIndexs[0];
    foreach(int tempTabIndex in tabIndexs){
    if(tempTabIndex < minIndex){
    minIndex = tempTabIndex;
    }
    } foreach(Control tempCon in this.Controls){
    if(tempCon.CanSelect == true){
    if(tempCon.TabIndex == minIndex){
    tempCon.Focus();
    break;
    }
    }
    }
    }else{
    int minTableIndex = 0;
    foreach(Control tempCon in this.Controls){
    if(tempCon.CanSelect == true){
    minTableIndex = tempCon.TabIndex;
    break;
    }
    } foreach(Control tempCon in this.Controls){
    if(tempCon.CanSelect == true){
    minTableIndex = tempCon.TabIndex<minTableIndex?tempCon.TabIndex:minTableIndex;
    }
    } foreach(Control tempCon in this.Controls){
    if(tempCon.CanSelect == true){
    if(tempCon.TabIndex == minTableIndex){
    tempCon.Focus();
    break;

    }
    }
    }
    }
    }
    }