复制并粘贴到DataGridViewTextBox内部

时间:2019-06-14 18:22:40

标签: vb.net winforms datagridview

我正在尝试使用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时它会触发。

看起来真的很难做到这么简单,所以我希望我只是缺少一些可以使它正常工作的东西。

1 个答案:

答案 0 :(得分:1)

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

AddHandler e.Control.KeyUp, AddressOf dgParts_TextBox_KeyUp

优良作法是在该行代码的反行之前删除所有先前添加的事件处理程序。如果不这样做,那么您可能会遇到多次处理同一事件的情况。

将子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