【问题标题】:DataGridView - Shortcut Keys Vs MouseClick for Cell FocusDataGridView - 鼠标单击以获取单元格焦点的快捷键
【发布时间】:2010-11-19 09:59:06
【问题描述】:

在使用按钮的键盘快捷键和 datagridview 时,我遇到了一种奇怪的情况。解释如下:

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

  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() 代码作为第一行。这是多余的,但是当用户使用快捷键访问此按钮时,会迫使网格失去焦点。该解决方案运行良好,但不确定上述情况的原因。仍在寻找答案。 :(

【问题讨论】:

  • 听起来可能是个愚蠢的问题,但可以确定:使用快捷方式时是否触发了按钮单击事件?
  • 基于 CellLeave 事件测试,我猜测 Grid 甚至没有失去焦点,因此特定的单元格焦点可能无法正常工作,这只是一个猜测,但没有理由为什么单元格焦点即使在这种情况下也无法正常工作。

标签: c# winforms datagridview focus keyboard-shortcuts


【解决方案1】:

检查 DataGridVeiw keyDown 事件上的组合键,如果键是 Alt+S 则将焦点设置为 DatagridVeiw

更新:

 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
    }
 }

【讨论】:

  • @Javed Akram:对不起,我听不懂你的回答。当焦点已经在网格上时,为什么要再次将焦点设置为网格。我希望将焦点放在在保存按钮单击事件代码中发现为无效的单元格上。
  • @Javed Akram:当您按下 alt 键时,keydown 事件永远不会触发,请尝试您提供的解决方案,让我知道它是否有效。
  • @Javed Akram:当焦点在一个单元格时你试过吗?当焦点位于 datagridview 中的单元格内时,我无法触发此事件。经过一番搜索,我发现 DataGridView 不会触发此事件,因为当单元格处于编辑模式时它不在焦点上。我找到了相同的替代解决方案。
  • 我已经问过您的问题,请参阅已接受的答案,这是一个很好的答案。 stackoverflow.com/questions/4284370/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多