2016-09-06 2 views
0

У меня есть представление списка с двумя группами. Я хочу, чтобы при проверке элемента он переместился во вторую группу, и когда я сниму его, он вернется к первому.Перемещение группы отмеченного элемента в виде списка C#

Вот код, который я пытался до сих пор:

private void lstServices_ItemChecked(Object sender, ItemCheckedEventArgs e) 
{ 
    foreach (ListViewItem item in lstServices.Items) 
    { 
    if (item.Checked) 
    { 
     item.Group = lstServices.Groups[1]; 
    } 
    else 
    { 
     item.Group = lstServices.Groups[0]; 
    } 
    } 
} 

Во-первых, я считаю, что глючит. Когда я отмечаю что-то, он имеет тенденцию перемещаться во вторую группу, но когда я отключаю его, он иногда возвращается к первой группе, иногда они просто не хотят отключаться, и я не могу понять, почему.

Во-вторых, я думаю, что это грязный способ сделать это, каждый раз, когда что-то проверяется, я проверяю весь список, а затем двигаюсь соответственно. Я предполагаю, что есть способ обратиться только к элементу, который я только что проверил, но я не могу понять, как это сделать!

+2

Первая быстрая вещь ... тогда вы все петлиете все предметы? Используйте e.Item и измените группу только в элементе listitem, запускающем событие. – Pikoh

+0

Это то, что я хочу, чтобы избавиться от него, но он не был уверен, как это сделать. Когда вы говорите, что используете e.item, вы имеете в виду его изменение следующим образом: private void lstServices_ItemChecked (отправитель объекта, ItemCheckedEventArgs ** e.item **)? Это дает нам ошибку. Я совершенно не знаком? – Coozbiscuit

+0

Не меняйте метод обработчика событий, просто добавьте это: 'ListViewItem item = e.Item; if (item.Checked) ... ' – Pikoh

ответ

1

Чтобы избавиться от цикла, вы должны сделать что-то вроде этого:

private void lstServices_ItemChecked(Object sender, ItemCheckedEventArgs e) 
{ 
    ListViewItem item=e.Item; 
    if (item.Checked) 
    { 
     item.Group = lstServices.Groups[1]; 
    } 
    else 
    { 
     item.Group = lstServices.Groups[0]; 
    } 
} 

ItemCheckedEventArgs переменная e имеет одно свойство, возвращая ListViewItem, что уволил событие.

+0

нет e.Item - думаю –

+0

о, извините. посмотрел ItemCheck event ... yes, ItemChekeEventArgs действительно имеет свойство Item –

+0

Да @ UthistranS., ItemChecked возвращает элемент в ItemCheckedEventArgs :) – Pikoh