DataGridView - 用于Cell Focus的快捷键和鼠标单击

时间:2010-11-19 09:59:07

标签: c# winforms datagridview focus shortcut-key

我使用按钮的键盘快捷键和datagridview时会出现奇怪的情况。以下是解释:

我有一个winform,其中有一个datagridview和一个保存按钮。保存按钮具有键盘快捷键Alt + S.我在网格中输入了一些行,并在Save按钮上单击验证所有单元格,如果单元格值无效,那么我将焦点设置为该单元格。以下是用于实现该目的的代码:

  for (var index = 0; index < GridView.Rows.Count; index++)
  {
    var itemRow = GridView.Rows[index];

    if (itemRow.Cells[SomeColumn.Name].Value.ToString() == string.Empty)
    {
       GridView.CurrentCell = itemRow.Cells[SomeColumn.Name];
       GridView.Focus();
    }
  }

上面的代码工作正常,当我点击保存按钮时,用光标将焦点设置在特定单元格中。

但是,当我使用快捷键时,焦点根本没有设置到单元格。我不确定为什么它会像这样。

出于好奇,我测试了datagridview的一个事件。单击“保存”按钮时会触发datagridview的CellLeave事件,但是当我使用快捷方式保存按钮时,它不会被触发。

为什么会这样?任何输入?我在使用快捷方式时如何设置焦点?

更新:我已经完成了正确使用它的技巧。我在保存按钮的按钮单击事件中添加了SaveButton.Focus()代码作为第一行。这是多余的,但当用户使用快捷键访问此按钮时,强制网格失去焦点。这个解决方案工作正常,但不确定上述情况可能是什么原因。还在寻找答案。 :(

1 个答案:

答案 0 :(得分:1)

检查DataGridView keyDown事件的组合键,然后如果键是Alt + S,则将焦点设置为DatagridView

<强>更新

 private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
 {
    if (e.KeyData == (Keys.Alt | Keys.S))
    {
         //put your code to validate i.e. what u are trying in button click event
    }
 }