C# 2005 WinForm比如我一个datagridview有两列Name和Number都是文本框
一个在业务上是字符串,一个是数字
我在EditingControlShowing事件里把Number的这一列加了KeyPress事件,在这个事件里禁止输入非数字字符
DataGridViewTextBoxEditingControl txtec = e.Control as DataGridViewTextBoxEditingControl;
txtec.KeyPress += new KeyPressEventHandler(TextBox_KeyPress_ForInt);结果问题出来了,Name列和Number都只能输入数字了
(如果直接点击Name列的单元格是没问题,如果先点击Number再点击Name列就不行了)
明明我只对Number作了这个的事件操作,确影响到两个列,
所以我猜测,所有的同类型的列用的是同一个对象,不然没解释啊大家有没有遇到这种情况,愿指教,谢谢先

解决方案 »

  1.   

    跟事件应该无关阿,是不是
    明明我只对Number关联了事件,却影响到两个列,
      

  2.   

    肯定没有搞错,我用switch做的
                switch (dgv.Columns[dgv.CurrentCell.ColumnIndex].Name.ToUpper())
                {
                    case "NAME":
                        break;
                    case "NUMBER":
                        DataGridViewTextBoxEditingControl   txtec   =   e.Control   as DataGridViewTextBoxEditingControl; 
                        txtec.KeyPress   +=   new   KeyPressEventHandler(TextBox_KeyPress_ForInt); 
                        break;
                }
      

  3.   

    EditingControlShowing是datagridview的事件~
      

  4.   

    to levenwood 
    你说的对啊,是datagridview的事件啊,有什么问题吗
      

  5.   

    既然是datagridview的事件当然就会在整个datagridview中触发,而不是在某一列中被触发。就像给datagridview加一个DoubleClick事件时是在双击datagridview的任何地方都会被触发而不是只在双击其中某个行、列或单元格的时候被触发。
      

  6.   

                    if  (dgv.Columns[dgv.CurrentCell.ColumnIndex].Name.ToUpper()==“NUMBER”)
                            {
                                            DataGridViewTextBoxEditingControl       txtec       =       e.Control       as   DataGridViewTextBoxEditingControl;  
                                            txtec.KeyPress       +=       new       KeyPressEventHandler(TextBox_KeyPress_ForInt);  
                            } 
    直接判断!要是等于name就不做任何操作
      

  7.   

    to yanlifenghack 
    你这个和switch有区别吗,呵呵to yanlifenghack  ,GhostAdai 
    我模模糊糊有点理解你们的意思了