Ctrl-C в DataGridView отображает ненужные символы при вставке - PullRequest
4 голосов
/ 09 февраля 2012

Возникла странная проблема при копировании данных ячейки из DataGridView.У меня есть ContextMenuStrip, который включает в себя возможность скопировать определенное поле.Когда они выбирают эту опцию в меню, значение копируется / вставляется точно так, как должно.

Мой код для копирования в буфер обмена:

public static void CopyToClipboard(string value)
{
   Clipboard.Clear();
   Clipboard.SetText(value);
}

Если я возьму это значение и вставлю егов любое другое приложение, и значение является правильным.

Моя проблема вступает в игру, если я выбираю ячейку в DataGridView и использую клавиши Ctrl-C для копирования в буфер обмена.Значение, скопированное в буфер обмена, корректно отображается в слове, блокноте, Excel, но у нас есть внутреннее приложение, в которое мы пытаемся вставить значение, и оно превратилось в беспорядочный набор символов.

Мое значение скопированобудет 12345678, а результатом в этом другом приложении станет -§-ý-:pC|yV-k²-û

Я попытался создать событие KeyDown на DataGridView, которое проверит, что это Ctrl-C с ключами изатем вызовите мою копию в код буфера обмена, но то же самое происходит со значениями.

private void DataGridView_KeyDown(object sender, KeyEventArgs e)
{
   if (e.Control && e.KeyCode == Keys.C)   
      CopyToClipboard(DataGridView2.CurrentCell.Value.ToString());
}

Если я использую событие CellEnter и вызываю копию в буфер обмена, она работает нормально, но я бы предпочел не копировать в буфер обмена каждый раз, когда вводится ячейка. Кажется, проблеманапрямую с клавишами Ctrl-C.

private void DataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    CopyAccountToClipboard(DataGridView2.CurrentCell.Value.ToString());
}  

У кого-нибудь была такая проблема?Любые предложения о том, как это исправить?

1 Ответ

3 голосов
/ 09 февраля 2012

Я предполагаю, что ваше другое приложение не может обрабатывать Unicode.Попробуйте изменить свой метод, чтобы установить текст в формате ANSI:

public static void CopyToClipboard(string value)
{
   Clipboard.Clear();
   Clipboard.SetText(value, TextDataFormat.Text);
}

Редактировать : Тогда мое второе предположение было бы, что DataGridView копирует текст в нескольких форматах при нажатии Ctrl+Cи ваше другое приложение сбивается с толку из-за присутствия форматов, которых оно не ожидает.

Не могли бы вы попробовать добавить в форму кнопку, которая при нажатии выполняет следующую логику?

string text = Clipboard.GetText(TextDataFormat.Text);
Clipboard.Clear();
Clipboard.SetText(text, TextDataFormat.Text);

Затем попробуйте:

  1. Копирование вашей ячейки в буфер обмена с помощью Ctrl+C
  2. Нажатие указанной кнопки
  3. Вставка текстав другом приложении

Не проверяйте приведенный выше код в вашем DataGridView_KeyDown обработчике событий (пока).

...