我有一个设置为 EditOnF2 的 DataGridView。我在设置单元格值的 CellEndEdit 事件处理程序中对数据进行了一些特殊处理。我仍然希望 EditOnKeystrokeOrF2 在按下 Esc 键时恢复到原始值的功能。不幸的是,在 CellEndEdit 事件处理程序中,我看不到一种方法来判断导致 CellEndEdit 事件被触发的原因。如果未按下 Esc 键,我只想更改单元格的值。我怎么知道是不是?
编辑:值得注意的是,在编辑单元格时不会触发 KeyDown 事件,也不会触发最终结束的击键。
Edit2:我已经尝试过 KeyPreview 建议,但表单仍然没有捕获被按下的 Escape 键。
Edit3:我一直在尝试让这个工作。我最初将以下一些内容作为单独的帖子发布,但觉得将其包含在此处可能更相关。
我在 DataGridView 中有一个单元格,现在设置为 EditProgrammatically。为了捕获开始编辑的击键,我将 cell.Value 设置为等于击键。但是,这会破坏单元格的“转义”功能 - 当您按下转义键时,它不会恢复到原始值,而是恢复到我以编程方式插入到单元格中的击键。
我相信如果我可以在一个单元格上设置“EditedFormattedValue”,这将是我想要放置我的击键值的地方,但这似乎是只读的。我怎样才能完成我正在尝试的事情?
一个澄清的例子:如果单元格中有一个值“54.3”,我按下“9”键,它开始编辑单元格并在那里放置一个“9”。如果我点击 Escape,它不会恢复为“54.3”,而是恢复为“9”。我想要的是让它恢复到“54.3”的原始值。
所以,我试图从头到尾解决这个问题。我认为真正的问题是我正在覆盖原始值并且无法确定是否应该恢复它。
Edit4:看起来 CellValidating 可能值得使用,但是当我尝试它时,我看到了奇怪的行为。在一个新项目中,我创建了 DataGridView 并注册了各种事件,并看到 CellValidating 在 CellEndEdit 之前被触发。但是,在我试图让它工作的项目中,CellEndEdit 在 CellValidating 之前触发。关于可能有什么区别的任何想法?