在本身DataGrid中没有此类事件进行直接处理,你需要去接获传给DataGrid的消息,从而预先处理。
大致的方法是,编写一个类去继承DataGrid,然后重载PreProcessMessage 函数,具体代码如下。
public class comDataGrid:DataGrid
{
private const int WM_KEYDOWN = 0x100;
public override bool PreProcessMessage( ref Message msg )
{
// Get press key code
Keys keyCode = (Keys)(int)msg.WParam & Keys.KeyCode;
if( this.DataSource != null )
{
// Full row selected
if( this.IsSelected( this.CurrentCell.RowNumber ) )
{
// The key code is "Delete"
if(msg.Msg == WM_KEYDOWN && keyCode == Keys.Delete )
{
// Show confirmation info
if( MessageBox.Show("Delete this row?",
"",
MessageBoxButtons.YesNo) == DialogResult.No )
return true;
}
}
}
return base.PreProcessMessage(ref msg);
}
public comDataGrid():base(){}
}
然后只要把程序中所有的“DataGrid”替换成“comDataGrid”,其他代码保持不变就可以使用了。