【发布时间】: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