Как проверить все флажки, нажав один? - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу создать код, установив флажок в ListView, чтобы автоматически выбрать все флажки в ListView.

Я использую Visual Studio 2005, поэтому у меня нет формы ItemChecked.Вот почему я хочу сделать это, используя событие ListView itemcheck.Вот мой код.

enter image description here

private void lvBase_ItemCheck_1(object sender, ItemCheckEventArgs e)
{

    if ( ) // If selecting one checkbox from the ListView
    {
        for (int i = 0; i < lvBase.Items.Count; i++)
        {
         // Select all checkbox from the ListView
         }
     }
     else // If unselecting one checkbox from the ListView
     {
        for (int i = 0; i < lvBase.Items.Count; i++)
        {
         // Unselect all checkbox from the ListView
         }
     } 
}

Можете ли вы помочь мне заполнить это?Или, если у вас есть идея получше, поделитесь:)

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Примечание: скорее всего, есть лучший способ сделать это, но это шаблон, который я использовал давным-давно, и тогда он работал.:)

В случае, который вы показали выше, он будет вызываться из listView, и ItemCheckEventArgs e сообщит вам, установлен флажок или нет.Это фактически говорит вам о состоянии флажка перед проверкой.Поэтому, если флажок снят, а пользователь только что установил флажок, e.CurrentValue будет CheckState.Unchecked.

Теперь проблема может возникнуть, если мы попытаемся обновить состояние всех флажков внутри ItemCheck.Событие состоит в том, что мы будем рекурсивно вызывать событие каждый раз, когда ставим флажок.Одним из способов решения этой проблемы является отслеживание того, вызывает ли пользователь событие (установив флажок) или мы запускаем событие, вызывая item.Checked = true;.

Что-то вроде этого может помочь:

// Set this to true when our code is modifying the checked state of a listbox item
private bool changingCheckboxState = false;

private void lvBase_ItemCheck(object sender, ItemCheckEventArgs e)
{
    // If our code triggered this event, just return right away
    if (changingCheckboxState) return;

    // Set our flag so that calls to this method inside the 
    // loop below don't trigger more calls to this method
    changingCheckboxState = true;

    // Set all the checkboxes to match the state of this one
    foreach(ListViewItem item in lvBase.Items)
    {
        item.Checked = e.CurrentValue != CheckState.Checked;
    }

    // Now that we're done, set our flag to false again
    changingCheckboxState = false;
}
0 голосов
/ 11 декабря 2018

Используйте свойство ListViewItem.Selected:

foreach(ListViewItem item in lv.Items)
    item.Selected = true;


foreach(ListViewItem item in lv.Items)
    item.Selected = !item.Selected;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...