Скопируйте и вставьте внутри DataGridViewTextBox - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь сделать действительно простое копирование и вставку внутри ячейки DataGridView, используя Ctrl + C и CTRL + V.
Мне не нужно иметь возможность копировать или вставлять несколько ячеек, только выделенный текстодна выбранная ячейка.

Режим редактирования для 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 Ответ

1 голос
/ 14 июня 2019

Всякий раз, когда вы добавляете обработчик событий в код с использованием синтаксиса, например

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...