Лучше создавать методы для процедур копирования / вставки, чтобы вы могли вызывать их из разных мест в вашем коде, например, при нажатии кнопки, при нажатии клавиши, при нажатии пункта меню ... et c.
Я не думаю, что у вас есть проблема с частью Copy
, так как функция GetClipboardContent
выполнит эту работу. Что касается части Paste
, следующий фрагмент кода получает данные из буфера обмена и вставляет значения диапазона выбора ячеек, начиная с CurrentCell. Ячейки вне диапазона обрезаются.
Private Sub CopyCells()
Clipboard.SetDataObject(DataGridView1.GetClipboardContent)
End Sub
Private Sub PasteCells()
Dim s = Clipboard.GetText
Dim ci = DataGridView1.CurrentCell.ColumnIndex
Dim ri = DataGridView1.CurrentCell.RowIndex
Dim colCount = DataGridView1.Columns.Count
Dim rowCount = DataGridView1.Rows.Count
For Each r In s.Split({ControlChars.CrLf}, StringSplitOptions.None)
Dim Cell = ci
For Each c In r.Split({ControlChars.Tab}, StringSplitOptions.None)
If Cell >= colCount Then Exit For
DataGridView1(Cell, ri).Value = c
Cell += 1
Next
ri += 1
If ri >= rowCount Then Exit For
Next
End Sub
Вызовите их из события DGV.KeyDown, например, следующим образом:
Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyDown
If e.Control Then
Select Case e.KeyCode
Case Keys.C
CopyCells()
e.Handled = True
Case Keys.V
PasteCells()
e.Handled = True
End Select
End If
End Sub