Как изменить индекс элемента в списке? - PullRequest
5 голосов
/ 12 марта 2012

У меня есть listView и две кнопки (ВВЕРХ, ВНИЗ), и я хочу переместить выбранный элемент вверх или вниз.
Я думал о переключении между выбранным элементом и верхним ... но код, который я пробовал ... не имеет смысла, потому что индекс доступен только для чтения.
также мины или сумма не имеют значения .. я вообще не могу связываться с индексом.

private void btnDown_Click(object sender, EventArgs e)
    {
         listView1.SelectedItems[0].Index--; // It's ReadOnly.
    }


Итак ... как я могу дать пользователю возможность изменять индекс ListViewItem, например, как VB позволяет нам изменять индекс этих элементов [как на картинке]

enter image description here

спасибо заранее ...

Ответы [ 3 ]

14 голосов
/ 12 марта 2012

Сначала необходимо удалить выбранный элемент , а затем повторно добавить его на новой позиции.

Например, чтобы переместить элемент на одну позицию вверх:

var currentIndex = listView1.SelectedItems[0].Index;
var item = listView1.Items[index];
if (currentIndex > 0)
{
    listView1.Items.RemoveAt(currentIndex);
    listView1.Items.Insert(currentIndex-1, item);
}
0 голосов
/ 11 июля 2016

В случае наблюдаемых коллекций вы также можете вызвать: .Move (currentindex, newindex);

* MSDN 1004 *

0 голосов
/ 22 февраля 2016

Ниже приведено усовершенствование ответа M4N для обработки изменения порядка элементов в верхней части списка и перехода в нижнюю часть списка

int currentIndex = listView1.SelectedItems[0].Index;
ListViewItem item = listView1.Items[currentIndex];
if (currentIndex > 0)
{
    listView1.Items.RemoveAt(currentIndex);
    listView1.Items.Insert(currentIndex - 1, item);
}
else
{
    /*If the item is the top item make it the last*/
    listView1.Items.RemoveAt(currentIndex);
    listView1.Items.Insert(listView1.Items.Count, item);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...