protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter &&
(
(!(ActiveControl is System.Windows.Forms.TextBox) ||
!((System.Windows.Forms.TextBox)ActiveControl).AcceptsReturn)
)
)
{
SendKeys.SendWait("{Tab}");
return true;
}
if (keyData == (Keys.Enter | Keys.Shift))
{
SendKeys.SendWait("+{Tab}");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
} 这段代码解决窗体上用回车键替代TAB键,但是我窗体上有个Button控件,按回车后无法响应click事件,请问有什么办法既能解决txtBox,combobox上回车代替TAB键,又不影响Button回车后响应click事件呢?
{
if (keyData == Keys.Enter &&
(
(!(ActiveControl is System.Windows.Forms.TextBox) ||
!((System.Windows.Forms.TextBox)ActiveControl).AcceptsReturn)
)
)
{
SendKeys.SendWait("{Tab}");
return true;
}
if (keyData == (Keys.Enter | Keys.Shift))
{
SendKeys.SendWait("+{Tab}");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
} 这段代码解决窗体上用回车键替代TAB键,但是我窗体上有个Button控件,按回车后无法响应click事件,请问有什么办法既能解决txtBox,combobox上回车代替TAB键,又不影响Button回车后响应click事件呢?
{ }
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
bool flag=null;
//如果是Button就执行.
if(!(ActiveControl is System.Windows.Forms.Button))
{
if (keyData == Keys.Enter &&
(
(!(ActiveControl is System.Windows.Forms.TextBox) ||
!((System.Windows.Forms.TextBox)ActiveControl).AcceptsReturn)
)
)
{
SendKeys.SendWait("{Tab}");
return true;
}
if (keyData == (Keys.Enter | Keys.Shift))
{
SendKeys.SendWait("+{Tab}");
return true;
}
flag= base.ProcessCmdKey(ref msg, keyData);
}
else //如果是button,就返回false,让执行自己的事件.
{
flag=false;
}
return flag;
}
{
if ((ActiveControl is TextBox || ActiveControl is ComboBox) &&
keyData == Keys.Enter)
{
keyData = Keys.Tab;
}
return base.ProcessDialogKey(keyData);
}
//--------------------
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData)
{
case Keys.Enter:
if (((ActiveControl is TextBox && !((TextBox)ActiveControl).Multiline) ||
ActiveControl is ComboBox))
{
keyData = Keys.Tab;
}
break;
}
return base.ProcessDialogKey(keyData);
}
并且排除多行文本的情况