zoukankan      html  css  js  c++  java
  • WinForm 中DataGrideView 对键盘输入进行筛选

    已解决
    请问为什么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

  • 相关阅读:
    【CF1029A】Many Equal Substrings(模拟)
    【CF1028C】Rectangles(线段树)
    【CF1028B】Unnatural Conditions(构造)
    【CF1028A】Find Square(签到)
    【CF1025C】Plasticine zebra(模拟)
    【CF1025A】Doggo Recoloring(签到)
    167.数据传送指令
    166.寻址方式
    165.基础
    164.多媒体操作系统
  • 原文地址:https://www.cnblogs.com/moses/p/1600875.html
Copyright © 2011-2022 走看看