博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

WinForm 中DataGrideView 对键盘输入进行筛选

Posted on 2009-11-11 13:28  脚印  阅读(883)  评论(0编辑  收藏  举报
已解决
请问为什么datagridview的KeyPress事件无效
 悬赏分:0 - 提问时间2009-3-4 23:55
我在KeyPress事件中写代码,想获取键盘输入的数据,以控制操作员只能输入一个字节的十六进制数,设断点调试时断点怎么都进不来,为什么? 

其他回答    共 1 条
因为datagridview的单元格其实是继承TextBox控件,所以当焦点在单元格时其实不是在datagridview的本身它只是一个容器,所以你用按键输入不会激发他的KeyPress事件。 

 2009-3-5 16:31

先引用一段百度知道的帖子

今天同事问我在 DataGrideView 中如何才能让单元格中只能输入数字

我随口就跟了一句,那还不容易,在DataGrideView的中注册KeyPress事件,然后在KeyPress事件中进行处理不就行了。

 他说他试过了,不行!

于是我就不信,自己做了一个Demo测试了一下,果然在Cell里面编辑不会触发KeyPress 事件。

于是上网查看,就有了上面百度知道的帖子

 

参考的部分大牛的文章后做了这样一个解决方案

 

首先要对 DataGrideView进行 重写

 

 

 

 


 class MyDataGridView : DataGridView
    {
        
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            
if (keyData == Keys.Back || keyData == Keys.Delete || (keyData >= Keys.D0 && keyData <= Keys.D9) || (keyData >= Keys.NumPad0 && keyData <= Keys.NumPad9))
                
return base.ProcessCmdKey(ref msg, keyData);
            
else
                
return true;
        }
    }

 

然后在Form中引用上面重新的MyDataGridView控件,平常该怎么写现在还怎么写就可以了

 

 

  private MyDataGridView dataGridView =new MyDataGridView();

 

Ok,这样就结解了,对键盘输入进行筛选的效果

 

但是,在选中单元格的时候直接点击键盘上面的方法也无能为力,

 

后来想想利用 PreviewKeyDown 事件处理这种情况就刚刚好

Code