已解决
悬赏分:0 - 提问时间2009-3-4 23:55
我在KeyPress事件中写代码,想获取键盘输入的数据,以控制操作员只能输入一个字节的十六进制数,设断点调试时断点怎么都进不来,为什么?
先引用一段百度知道的帖子
今天同事问我在 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