如何禁用DataGridView中的箭头键?

时间:2015-01-26 15:34:36

标签: c# datagridview

我在C#中有一个DataGridView,需要禁用箭头键(因此他们无法通过键导航列表)。我试过这个:

    void dataGridView1_KeyDown(object sender, KeyEventArgs e)
    {
        switch (e.KeyData & Keys.KeyCode)
        {
            case Keys.Up:
            case Keys.Right:
            case Keys.Down:
            case Keys.Left:
                e.Handled = true;
                e.SuppressKeyPress = true;
                break;
        }

    }

但它没有禁用箭头键。有什么想法吗?

我尝试了这个处理程序,但遇到了编译错误:

this.dataGridView1.KeyDown += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_KeyDown);
  

错误1“dataGridView1_KeyDown”没有重载与委托“System.Windows.Forms.DataGridViewCellEventHandler”Form1.Designer.cs匹配78 43 FaxMonitorCSharp

1 个答案:

答案 0 :(得分:2)

只要当前单元格不在EditMode中,绑定KeyDown事件就会很有效,但如果是,则需要更多创意。我创建了一个继承的DataGridView类,重写了ProcessCmdKey,如下所示。

class NewDataGridView : System.Windows.Forms.DataGridView
{
    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
    {
        (FindForm() as Form1).DataGridViewKeyDown((DataGridView)this, keyData);
        //return base.ProcessCmdKey(ref msg, keyData);
        return true;
    }
}

这会吸收datagridview的所有按键,并将它们重定向到以容器形式存在的方法。