我正在尝试从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键上方的代码可以正常工作。我移到下一个单元。我该如何预防?
答案 0 :(得分:0)
您必须使用PreviewKeyDown事件而不是KeyDown。
根据Microsoft Control.PreviewKeyDown Event Description
某些键通常会忽略某些键,例如TAB,RETURN,ESC和箭头键,因为它们不被视为输入键。
如果要在按下Tab键时使用KeyDown事件,则需要在PreviewKeyDown事件中插入以下代码。
if (e.KeyCode == Keys.Tab) { e.IsInputKey = true; }
对不起,我认为问题太简单了。这个怎么样。当您处于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);
}