在datagridview上禁用Tab键

时间:2019-02-14 17:14:58

标签: c# winforms

我正在尝试从datagridview禁用Tab键,也要在其上创建自己的事件。同样,如果可以禁用上,下,右,左并输入键。 OnLoad事件

this.dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;

在KeyDownEvent上

 private void gridInvoice_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Tab)
        {
            //SelectNextControl(dataGridView1, true, true, true, true);
            // or Parent.SelectNextControl() if the grid is an only child, etc.
            e.Handled = true;
        }

    }

使用Tab键上方的代码可以正常工作。我移到下一个单元。我该如何预防?

1 个答案:

答案 0 :(得分:0)

您必须使用PreviewKeyDown事件而不是KeyDown。

根据Microsoft Control.PreviewKeyDown Event Description

  

某些键通常会忽略某些键,例如TAB,RETURN,ESC和箭头键,因为它们不被视为输入键。

如果要在按下Tab键时使用KeyDown事件,则需要在PreviewKeyDown事件中插入以下代码。

if (e.KeyCode == Keys.Tab) { e.IsInputKey = true; }

在编辑模式下,感谢Jimi

对不起,我认为问题太简单了。这个怎么样。当您处于DGV的编辑模式时,可以覆盖ProcessCmdKey以忽略Tab。太残酷了吗? 我认为这比制作一个新的编辑控件要简单,但也不是优雅。

    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
    {
        if (keyData == Keys.Tab && dataGridView1.EditingControl != null) { return true; }
        else return base.ProcessCmdKey(ref msg, keyData);
    }

来自Similar problem