【问题标题】:Copy and Paste inside DataGridViewTextBox在 DataGridView 文本框内复制和粘贴
【发布时间】:2023-07-29 10:19:01
【问题描述】:

我正在尝试使用 Ctrl+C 和 CTRL+V 在 DataGridView 单元格内进行非常简单的复制和粘贴。
我不需要能够复制或粘贴多个单元格,只需复制或粘贴单个选定单元格的选定文本。

DataGridView 的编辑模式设置为 EditOnEnter,因为他们不喜欢双击来编辑值。

CTRL+C 和 CTRL+V 在单元格内都不能正常工作。

我找到了一个解决方法,但它确实有问题:

Private Sub dgParts_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgParts.EditingControlShowing
    AddHandler e.Control.KeyUp, AddressOf dgParts_TextBox_KeyUp
End Sub

Private Sub dgParts_TextBox_KeyUp(sender As Object, e As KeyEventArgs)
    If e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control Then
        Clipboard.SetText(sender.SelectedText)
    End If
    If e.KeyCode = Keys.V AndAlso e.Modifiers = Keys.Control Then
        sender.SelectedText = Clipboard.GetText
    End If
End Sub

由于某种原因,KeyUp 触发多次,所以当我进行粘贴时,它会插入文本 5 次。

我尝试将它切换到 KeyDown 而不是 KeyUp,但是当我按下 CTRL 时它会触发,而不是在我同时按下 C 或 V 时触发。

做这么简单的事情似乎真的不应该这么难,所以我希望我只是错过了一些能让它正常工作的东西。

【问题讨论】:

  • CTRL+C 和 CTRL+V 在单元格内都不能正常工作。 没有该代码的单元格中,CTRL+V 和 CTRL+C 会做什么?
  • @preciousbetine 什么都没有。不复制、不粘贴、不输入 C 或 V。
  • @AndyD273 您是否发现每次移动到文本框时,“粘贴”的数量都会增加?您要编辑第五个单元格吗?
  • @JayV 是的,它在第一列粘贴一次,在第二列粘贴两次,在第三列粘贴三次,依此类推。
  • 那么你在某处有处理按键的代码,它正在篡改默认行为。

标签: vb.net winforms datagridview


【解决方案1】:

每当您在代码中使用类似的语法添加事件处理程序时

AddHandler e.Control.KeyUp, AddressOf dgParts_TextBox_KeyUp

最好在该行代码之前加上相反的代码,以删除任何以前添加的事件处理程序。如果你不这样做,那么你很可能会遇到同一个事件被多次处理的情况。

将 Sub dgParts_EditingControlShowing 更改为包含 RemoveHandler e.Control.KeyUp, AddressOf dgParts_TextBox_KeyUp

最终版本应该是这样的:

Private Sub NewMethod(sender As Object, e As DataGridViewEditingControlShowingEventArgs)
    RemoveHandler e.Control.KeyUp, AddressOf dgParts_TextBox_KeyUp
    AddHandler e.Control.KeyUp, AddressOf dgParts_TextBox_KeyUp
End Sub

【讨论】:

  • 这确实奏效了,而且我确实学到了一些新东西,尽管多亏了主要的 cmets,我才能够找到问题的根本原因。
  • @AndyD273 很高兴以任何方式提供帮助