我有一个设置为EditOnF2的DataGridView。我在CellEndEdit事件处理程序中对数据进行了一些特殊的处理,以设置单元格的值。我仍然希望在按Esc键时将EditOnKeystrokeOrF2的功能恢复为原始值。不幸的是,在CellEndEdit事件处理程序中,我没有找到一种方法来说明导致CellEndEdit事件被触发的原因。我只想在未按Esc键的情况下更改单元格的值。我怎么知道是不是?

编辑:值得注意的是,在编辑单元格时或最终结束的击键时,不会触发KeyDown事件。

Edit2:我已经尝试过KeyPreview建议,但是表格仍然无法捕获按下的Escape键。

Edit3:我一直在尝试使此工作正常。我最初将以下某些内容作为单独的帖子发布,但觉得在此处添加它可能更相关。

我在DataGridView中有一个单元格,现在将其设置为EditProgrammatically。为了捕获开始编辑的击键,我将cell.Value设置为等于击键。但是,这破坏了单元格的“转义”功能-当您按Escape键时,而不是还原为原始值,而是还原为我以编程方式插入到单元格中的击键。

我相信,如果可以在一个单元格上设置“EditedFormattedValue”,那么这就是我要输入击键值的位置,但是这似乎是只读的。我该如何完成自己的尝试?

需要澄清的示例:如果单元格中的值为“54.3”,而我按“9”键,它将开始编辑单元格并在其中放置“9”。如果我按Escape键,则不会恢复为“54.3”,而是恢复为“9”。我想要的是使其恢复到其原始值“54.3”。

因此,我正在尝试从头到尾解决这个问题。我认为真正的问题是我正在覆盖原始值,并且无法确定是否应还原它。

Edit4:看起来CellValidating可能值得使用,但是当我尝试使用它时,我看到了奇怪的行为。在一个新项目中,我创建了DataGridView并注册了各种事件,并看到在CellEndEdit之前触发了CellValidating。但是,在我试图使其工作的项目中,CellEndEdit在CellValidating之前触发。有什么区别的想法吗?

最佳答案

将表单上的KeyPrevew property设置为true;这样可以防止控件先被吞噬。 :)

关于c# - 如何捕获在C#中的DataGridView上触发 "CellEndEdit"的击键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/774608/

10-11 01:54