【发布时间】:2010-11-26 13:48:36
【问题描述】:
我正在尝试使用 Enter 键移动到 DataGridView 中的下一个(非只读)列。在正常情况下,我处理 KeyDown 事件,一切正常。
但是,当我编辑一个字段时,Enter 键总是会完成编辑,然后移动到下一个行。
奇怪的是,我的测试台上出现了以下事件序列。 (括号中的数字是事件 arg 的 (rowIndex, columnIndex))。
没有备用导航:
按 Enter(不编辑字段):
PreviewKeyDown key = Return
KeyDown key = Return
CellLeave (0, 0)
RowLeave (0, 0)
CellValidating (0, 0)
CellValidated (0, 0)
RowEnter (1, 0)
CurrentCellChanged
CellEnter (1, 0)
SelectionChanged
KeyUp key = Return
按 Enter(编辑字段时):
CellClick (0, 0)
CellBeginEdit (0, 0)
EditingControlShowing
(I press Enter now)
CellLeave (0, 0)
RowLeave (0, 0)
CellValidating (0, 0)
CellValidated (0, 0)
CellEndEdit (0, 0)
RowEnter (1, 0)
CurrentCellChanged
CellEnter (1, 0)
SelectionChanged
KeyUp key = Return
即当我在编辑字段时按 Enter 时,我从未收到 PreviewKeyDown 或 KeyDown 事件。
我尝试在事件处理程序中破解一些备用导航。出于测试目的,我总是编辑 (r0, c0),并通过将 CurrentCell 属性显式设置为 (r0, c1) 来“导航”。
当我在 CellEndEdit 中设置 CurrentCell 时,我最终位于 (r1, c1)。当我在 KeyUp 中设置 CurrentCell 时,我最终到达 (r0, c1),这很好,但只有在它明显选择 (r1, c0) 之后。我想我可以在导航期间禁用控件上的更新,但这个解决方案似乎不太优雅。
有什么建议吗?我错过了什么吗?
【问题讨论】:
标签: c# winforms datagridview datagrid navigation