【问题标题】:How to catch cancelled cell edit in DataGridView?如何在 DataGridView 中捕获取消的单元格编辑?
【发布时间】:2015-08-18 17:58:03
【问题描述】:

我可以轻松跟踪 DataGridView 中的单元格变化:

Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) _
        Handles DataGridView1.EditingControlShowing
    If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
        RemoveHandler e.Control.TextChanged, AddressOf ProcessCellChange
        AddHandler e.Control.TextChanged, AddressOf ProcessCellChange
    'ElseIf TypeOf e.Control Is ...etc.
    End If
End Sub

当用户输入时,我可以看到这种变化。但是当用户按下 Esc 并取消编辑时,我怎样才能捕捉到“撤消”的东西?

示例:单元格包含Hello,我将其更改为BYE,然后按Esc。现在Hello 文本又回到了单元格中。撤消文本后会触发什么事件,以便我可以使用Hello 更新依赖控件?

当我检查事件 LeaveLostFocus 时,它们仍然给我文本 BYE,因为它们发生在文本还原之前。知道如何在按 Esc 后获取Hello 吗?

【问题讨论】:

  • 为什么不等待用户接受更改以更新取决于值的任何内容?
  • @JoshPart – 在“A”列中我有文本输入,在“B”列中我有基于该文本输入创建的文件名(但它们是手动调整的)。我想让“B”在“A”的更改上始终保持最新,即使在“A”被取消时,所以如果用户按下“生成”按钮,总会有正确的结果。

标签: .net vb.net winforms events


【解决方案1】:

我现在通过禁用“取消取消”解决了(或解决了?)问题。如果用户按下 Esc,则不会执行显着的撤消。它是通过在EditingControl 的每次值更改时更新底层 DataGridView 单元格来完成的,因此,即使撤消时发生反转,它也没有效果:

Private Sub ProcessCellChange(sender As Object, e As EventArgs)
'...
    content = DirectCast(DataGridView1.EditingControl, Control).Text
    currentRow.Cells(ContentColumn.Index).Value = content
'...
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2018-09-25
    • 1970-01-01
    相关资源
    最近更新 更多