ListView с копировать-вставить - PullRequest
10 голосов
/ 12 июня 2010

Есть ли простой способ добавить копировать-вставить для просмотра списка, или я должен просто вместо этого переключиться на DataGridView?

Мое приложение похоже на адресную книгу, оно содержит электронные письма, номера и т. Д., Где копирование вставляетсябыло бы полезно.

Ответы [ 3 ]

15 голосов
/ 01 сентября 2014

Пример ниже обрабатывает Ctrl-C как копию команды буфера обмена и копирует значение второго столбца из всех выбранных строк:

    private void resultsListView_KeyUp(object sender, KeyEventArgs e)
    {
        if (sender != resultsListView) return;

        if (e.Control && e.KeyCode == Keys.C)
            CopySelectedValuesToClipboard();
    }

    private void CopySelectedValuesToClipboard()
    {
        var builder = new StringBuilder();
        foreach (ListViewItem item in resultsListView.SelectedItems)
            builder.AppendLine(item.SubItems[1].Text);

        Clipboard.SetText(builder.ToString());
    }

Используйте item.Text для первого столбца иitem.SubItems[n].Text для других столбцов.

Ссылки:

  1. Что такое KeyChar для Ctrl + C и Ctrl + V в C # , чтобы получить ключи и правильнообработчик событий.
  2. Копирование ListView в буфер обмена в VB.NET, C # и VB6 для полного примера копирования ListView в буфер обмена.
1 голос
/ 12 июня 2010

Не очень сложно сделать ручное копирование и вставку, просто вставьте обработчик событий для KeyDown (или, может быть, он KeyPress не может запомнить, но уверен, что это один из них) и проверьте, какая клавиша нажата посмотрите на e.KeyCode и проверьте, истинно ли e.Control. Если это один из x, c или v, просто позвоните Clipboard.SetText или Clipboard.GetText для записи / чтения в / из буфера обмена.
См. здесь для документации MSDN класса Clipboard.

Вы также можете добавить контекстное меню с копией и вставкой в ​​ListView, чтобы завершить его.

0 голосов
/ 18 октября 2017

Моим требованием было добавить кнопку для копирования списка серийных номеров в буфер обмена. Я добавил кнопку обычным способом, а затем добавил следующий метод:

private void btnClipboard_Click(object sender, EventArgs e)
{
    String clipText = string.Empty;
    foreach (ListViewItem item in lstSerials.Items)
    {
        clipText += item.SubItems[0].Text;
        clipText += Environment.NewLine;
    }
    if (!String.IsNullOrEmpty(clipText))
    {
        Clipboard.SetText(clipText);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...