datagridview回车会自动换行,我不想让他换行,去网上查了下
有说重载ProcessDialogKey函数的我试了试,遇到个奇怪的问题    public class MyDataGridView : DataGridView
    {
        protected override bool ProcessDialogKey(Keys keyData)
        {
            if (keyData == Keys.E || keyData == Keys.Enter || keyData == Keys.I)
            //上面一条做实验 条件是判断e,i,回车
            {
                MessageBox.Show("123");                return true;
            }
            return base.ProcessDialogKey(keyData);
        }[code=csharp]
  
    } 
[/code]
我按上边那么些,当按下E和I的时候 成功弹出对话框“123”,但是我按回车就毫无反应,
我在这个函数中加断点,执行的时候发现按E和I可以进入函数,我按回车干脆都没有进入过
ProcessDialogKey这个函数,也就是说我按回车根本就没调用过这个函数,求解为什么会这样
我看到datagridview的定义里还有一些函数例如:ProcessEnterKey(Keys keyData);
ProcessF2Key(Keys keyData);
ProcessEscapeKey(Keys keyData);这些函数不允许重载,难道datagridview对不同的按键做单独处理吗?------------------------------------
下边是问题2: 下边是dataGridView的KeyPress函数  private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar ==(char) Keys.E)
            {
                MessageBox.Show("e");
            }
            if (e.KeyChar ==(char) Keys.Enter)
            {
                MessageBox.Show("enter");
            }
        }我按回车会进到这个函数,跟上边的完全反过来我按E就不进到这个函数,这时怎回事?

解决方案 »

  1.   

    问题2:一个是e,一个是E,是不同的,你按大写的E就可以了。
      

  2.   

    问题1:可以重写OnKeyPress方法,获得上述按键。
     protected override void OnKeyPress(KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
                //上面一条做实验 条件是判断e,i,回车
                {
                    MessageBox.Show("123");
                }
                base.OnKeyPress(e);
            }
      

  3.   


    Keys枚举类型了没有小写字符啊 ,我这样(int)e.KeyChar == 101,倒是能行,不过还要一个一个字符去看码值是多少 好麻烦啊
      

  4.   

    OnKeyPress是在哪定义的 我看datagridview里没有这个函数啊
      

  5.   


    Keys枚举类型了没有小写字符啊 ,我这样(int)e.KeyChar == 101,倒是能行,不过还要一个一个字符去看码值是多少 好麻烦啊
    e.KeyChar == 'a' 这样就行了,不用记ascii码。
      

  6.   

    OnKeyPress是在哪定义的 我看datagridview里没有这个函数啊public partial class CustomControl1 : DataGridView
        {
            public CustomControl1()
            {
                InitializeComponent();
            }        protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }        protected override bool ProcessDialogKey(Keys keyData)
            {
                return base.ProcessDialogKey(keyData);
            }        protected override bool ProcessDataGridViewKey(KeyEventArgs e)
            {
                return base.ProcessDataGridViewKey(e);
            }        protected override void OnKeyPress(KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
                //上面一条做实验 条件是判断e,i,回车
                {
                    MessageBox.Show("123");
                }
                base.OnKeyPress(e);
            }
        }
    都有的,你得细心点看。
      

  7.   

    OnKeyPress是在哪定义的 我看datagridview里没有这个函数啊public partial class CustomControl1 : DataGridView
        {
            public CustomControl1()
            {
                InitializeComponent();
            }        protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }        protected override bool ProcessDialogKey(Keys keyData)
            {
                return base.ProcessDialogKey(keyData);
            }        protected override bool ProcessDataGridViewKey(KeyEventArgs e)
            {
                return base.ProcessDataGridViewKey(e);
            }        protected override void OnKeyPress(KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
                //上面一条做实验 条件是判断e,i,回车
                {
                    MessageBox.Show("123");
                }
                base.OnKeyPress(e);
            }
        }
    都有的,你得细心点看。
    谢谢你写了这么多 不过我刚刚去实验了一下 发现不管用
    base.OnKeyPress(e);
     这个函数执行的时候会调用下边这个函数,private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if ((int)e.KeyChar == 13)
                {
                    MessageBox.Show("成功");
                }
            }因为dataGridView按回车会自动到下一行,我不想让他下一行,所以想屏蔽这个动作,
    我按你的说法 这样写    public class mydatagrid : DataGridView
        {
            protected override void OnKeyPress(KeyPressEventArgs e)
            {
                if (e.KeyChar == 13)
                {
                    return;
                }
                else
                {
                    base.OnKeyPress(e);
                }
            }
        }
      
    我感觉这样写就是屏蔽掉了private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
    这个函数,但是dataGridView依然换到了下一行
      

  8.   

    OnKeyPress是在哪定义的 我看datagridview里没有这个函数啊public partial class CustomControl1 : DataGridView
        {
            public CustomControl1()
            {
                InitializeComponent();
            }        protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }        protected override bool ProcessDialogKey(Keys keyData)
            {
                return base.ProcessDialogKey(keyData);
            }        protected override bool ProcessDataGridViewKey(KeyEventArgs e)
            {
                return base.ProcessDataGridViewKey(e);
            }        protected override void OnKeyPress(KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
                //上面一条做实验 条件是判断e,i,回车
                {
                    MessageBox.Show("123");
                }
                base.OnKeyPress(e);
            }
        }
    都有的,你得细心点看。我搞定了 最后是重载了ProcesCmdKey