原因:首先你是通过什么事件来捕捉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);}
结果:
在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);}
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;
}
}
}
}
}
}