Как удалить выбранные элементы из ListView, нажав кнопку удаления? - PullRequest
4 голосов
/ 26 июля 2011

Я хочу удалить один или несколько выбранных элементов из ListView.Каков наилучший способ сделать это?Я использую C # и dotnet Framework 4.

Ответы [ 5 ]

10 голосов
/ 26 июля 2011

Вы можете удалить все выбранные элементы, повторяя коллекцию ListView.SelectedItems и вызывая ListView.Remove для каждого элемента всякий раз, когда пользователь нажимает клавишу удаления.

private void listView1_KeyDown(object sender, KeyEventArgs e)
{
    if (Keys.Delete == e.KeyCode)
    {
        foreach (ListViewItem listViewItem in ((ListView)sender).SelectedItems)
        {
            listViewItem.Remove();
        }
    }
}
6 голосов
/ 26 июля 2011

Я думаю, что есть нечто, называемое listView.Items.Remove (listView.SelectedItem), и вы можете вызвать его из события нажатия кнопки удаления.Или запустите цикл foreach и посмотрите, выбран ли элемент, удалите его.

foreach(var v in listView.SelectedItems)
{
   listView.Items.Remove(v)
}
3 голосов
/ 19 февраля 2016

Я думаю, что это самый простой режим.

private void listView_KeyDown(object sender, KeyEventArgs e)
{
  if (e.Key == Key.Delete)
  {
    this.listView.Items.Remove(listView.SelectedItem);
  }
}
2 голосов
/ 26 июля 2011

Попробуйте:

// Get an array of all selected items
ListViewItem[] selectedItems = (from i in listView.Items where i.Selected select i).ToArray();

// Delete the items
foreach (ListViewItem item in selectedItems)
    listView.Items.Remove(item);

РЕДАКТИРОВАТЬ
Я только что заметил, что класс ListView уже имеет свойство SelectedItems.Чтобы убедиться, что вы не изменяете коллекцию, для которой вы выполняете итерацию, я сначала скопирую эту коллекцию:

Кажется, что выше (с использованием AddRange) не сработало.Я думал, что удаление элементов путем итерации по перечисляемому SelectedItems вызовет исключение, но, очевидно, это не так.Поэтому мой исходный код кода будет изменен, чтобы соответствовать другим ответам ... извините за публикацию нефункционального кода ...

0 голосов
/ 08 мая 2018

Я знаю, что это немного не связано, но в WPF упомянутые методы не работают для меня.Мне пришлось создать копию выбранных элементов и использовать их для удаления элементов из списка .:100100

private void ListBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Delete)
            {

                var lst = new List<object>();

                foreach (var itemSelected in ListBox.SelectedItems)
                {
                    lst.Add(itemSelected);
                }

                foreach (var lstitem in lst)
                {
                    ListBox.Items.Remove(lstitem);
                }

            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...