首先,推荐DataGrid控件的使用大全http://www.syncfusion.com/faq/windowsforms/faq_c44c.aspx#q869q
接着,来解决Enter事件的触发问题。
最近做项目时发现DataGrid处于编辑模式下,textbox控件的keydown事件中捕捉不到enter按键,苦死我了,找了半天就是找不到解决方案,按其它按钮都能show出key。keyValue,但是按enter按钮没反应,没办法就使用TextBox。Leave方法来解决,但是客户不满意,非要使用anter,没辙,想偷懒还不行,今天搜了半天终于找到了,与大家分享
两种情况,第一种,在Form中
添加一个窗体,窗体中有dg控件,想是dg控件响应enter事件,这个时候可以通过重写form的ProcessCmdKey事件,代码如下
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if(msg.WParam.ToInt32() == (int) Keys.Enter)
{
SendKeys.Send("{Tab}");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
第二种情况:在类中。
这个时候,我们在做窗体的时候,没有添加Winform窗体,然后在上面做界面设计,我们采用一种纯代码方式,我讨厌做一个界面就添加一个窗体,所以我就自己写代码,用代码去控制控件的生成,设置它的属性,这个时候如果要重写ProcessCmdKey事件就必须继承System.Windows.Forms.Form类,然后在重写该方法,但测试发现依然不响应,这个时候我想到了重写datagrid控件,代码也很简单。
1.添加一个自定义控件MyDataGrid,让这个控件继承System.Windows.Forms.DataGrid
2。重写MyDatagrid控件的ProcessCmdKey事件。
3.在其他类中使用MyDataGrid控件即可
大功告成。