none
为什么DataGridView控件的KeyPress时间不能直接使用 RRS feed

  • 问题

  • 大家好,我想知道为什么直接调用dataGridView的KeyPress事件时,没有作用,在输入字符时,程序不会运行到KeyPress的函数中。而通过DataGridView的EditingControlShowing函数调用KeyPress事件时候程序可以运行。例如(此段程序是百度的别人写的):

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                Control cotrol = (Control)e.Control;
                cotrol.KeyPress += new KeyPressEventHandler(SBDH_KeyPress);
            }

            private void SBDH_KeyPress(object sender, KeyPressEventArgs e)
            {
                char cha = e.KeyChar;
                if (this.dataGridView1.CurrentCell.ColumnIndex == 6 ¦ ¦ this.dataGridView1.CurrentCell.ColumnIndex == 7 ¦ ¦ this.dataGridView1.CurrentCell.ColumnIndex == 8 ¦ ¦ this.dataGridView1.CurrentCell.ColumnIndex == 9 ¦ ¦ this.dataGridView1.CurrentCell.ColumnIndex == 10)
                {
                    if (char.IsLetter(cha))
                    {
                        e.Handled = true;
                    }
                }
            }

     

     如果不使用EditingControlShowing函数调用SBDH_KeyPress,直接用SBDH_KeyPress时,不起作用。汗,啰嗦了一堆,也不知道表达清楚没有......

    2008年12月26日 6:34

答案

  • 你直接点击DataGridView的某处,不要点击某个单元格,我的意思是让DataGridView控件本身获得输入焦点,而不是某个单元格获得输入焦点,然后再输入字符,试试能不能触发DataGridView的KeyPress事件!
    2008年12月26日 9:04
    版主

全部回复

  • 你好!
       EditingControlShowing事件是在显示用于
    编辑单元格的控件的时候发生,处理这个事件可以在单元格处于编辑状态的时候对编辑控件执行自定义初始化,你的代码中是订阅了这个编辑控件的KeyPress事件。当单元格处于编辑状态的时候,你按了某个字符键就会触发这个事件了。
       KeyPress事件是在控件有输入焦点,而且有字符键按下的时候触发的,你说订阅DataGridView的KeyPress事件,处理函数不会执行,那请问你是怎样写的代码,并且你是怎样验证处理函数不会执行的呢?
    2008年12月26日 8:32
    版主
  • 谢谢版主,我说的订阅DataGridView的KeyPress事件,处理函数不执行的意思是,双击dataGridView控件对应的KeyPress事件,生成dataGridView_KeyPress(object sender,KeyPressEventArgs e)函数,调试的时候,在dataGridView单元格中输入字符时,程序并没有运行到dataGridView_KeyPress这个函数中,不能执行这个函数中的语句。不是在DataGridView单元格中输入字符就能触发KeyPress函数吗?

    2008年12月26日 8:43
  • 你直接点击DataGridView的某处,不要点击某个单元格,我的意思是让DataGridView控件本身获得输入焦点,而不是某个单元格获得输入焦点,然后再输入字符,试试能不能触发DataGridView的KeyPress事件!
    2008年12月26日 9:04
    版主
  • 明白了,将输入焦点放在整个控件上可以触发KeyPress事件,多谢版主。

    2008年12月26日 9:15