我想大多数人都看过韩睿的关于重写datagridtablestyle的相关文章,里面涉及到了把combobox等控件嵌入datagrid,那么当我们也按照类似的方法重写后发现,他们在实际的应用中并不是很好用,比如说我们将一个参照的textbox控件嵌入到datagrid中后,不管是否在textbox中是否对键盘做了处理,结果到了在datagrid中使用键盘操作时发现,重写processcmdkey或者在textbox中加入了对回车键的处理后都有这样一个问题,键盘操作会被连续的触发2次,打个比方,我们的datatable 有4列,如果在第一列回车,那么光标会跳到第3列,而不是第2列,我们可以清楚的发现回车在第2列也被触发了一次。这是为什么呢?希望有高手做答!!!望赐教!
请大家多多发表意见!谢谢!
{
int WM_KEYDOWN=256;
int WM_SYSKEYDOWN = 260;
if(this.ActiveControl is System.Windows.Forms.DataGridTextBox )
{
if(msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN)
{
switch( keyData)
{ //case Keys.Down:
// //MsgBox("截到下箭头键")
// MessageBox.Show("下键");
// return true;
// break;
//case Keys.Up:
// //MsgBox("截到上箭头键")
// MessageBox.Show("上键");
// return true;
case Keys.Enter: if(CheckDataGrid(this.dataGrid1) ==true)
{
switch (Dc.GetTextBoxName(dataGrid1,dataGrid1.CurrentCell.ColumnNumber).Name.ToString())
{
case "ITEM":
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
break;
case "QTY":
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
break;
case "PRICE":
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
break;
case "LEAD_TIME":
//SendKeys.Send("{Down}");
SendKeys.Send("{Right}");
SendKeys.Send("{Tab}");
break;
default:
SendKeys.Send("{Tab}");
break;
}
}
return true;
//break;
//case Keys.Control + Keys.V:
// //<CTRL> + C 组合键)
// //if( Me.ActiveControl.Parent.GetType Is GetType(DataGrid) And Me.Txt_Type.Text <> "CHAO HUO" Then
// // keyData = Keys.NoName
// //End If // return true;
// break;
//case Keys.Alt + Keys.Z:// 'MsgBox("<ALT> + z 组合键被截获")
// return true;
// break;
}
}
}
return false;
}