当DataGridView具有焦点时,如何触发"接受"按钮?

War*_*now 4 c# datagridview button winforms

我将一个表单作为对话框呈现.该表单包含DataGridView,TextBox和OK/Cancel按钮,如下所示:

在此输入图像描述

  • 我已将表单的AcceptButton属性设置为OK按钮,并将表单的CancelButton属性设置为Cancel按钮.
  • 我已将OK按钮的DialogResult属性设置为"OK",并将Cancel按钮的DialogResult属性设置为"Cancel"

如果文本框具有焦点,则按Enter键将使用"确定"的DialogResult关闭表单.但是,如果DataGridView具有焦点,则按Enter键不会关闭表单.

但是,按Esc键会导致窗体关闭,并显示取消的DialogResult.

这是一个两部分问题:

  1. 当DataGridView具有焦点时,Enter键的行为不一致的原因是什么?
  2. 当DataGridView具有焦点时,如何使用Enter的DialogResult来关闭窗体?

Dav*_*all 6

DataGridView回车键使用移动到下面的单元格的电池当前正在编辑.没有单一属性可以更改此行为,但您可以覆盖网格的keydown行为:

dataGridView1.KeyDown += new KeyEventHandler(dataGridView1_KeyDown);

void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        button1.PerformClick();
        e.Handled = true;        
    }    
}
Run Code Online (Sandbox Code Playgroud)

这仍然会为您提供导航箭头键,并且仍然允许用户添加新行(一旦数据输入到网格的底行,就会出现新行).

  • +1提及我需要设置e.Handled = true.如果不这样做,DataGridView仍会处理按键. (2认同)

dwe*_*ner 3

  1. 我认为 Enter 是数据输入的有效键,与 Tab 一起,也是他们希望为那些最习惯使用键盘的用户保留的键,而不是点击键。

  2. 您是否尝试过在按键事件处理程序中添加对PerformClick()的调用?