Как переместить отмеченный элемент в список - PullRequest
2 голосов
/ 29 октября 2019

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

Я уже пытался использовать оператор foreach, чтобы получить все отмеченные элементы в CheckedListBox.

private void TaskBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if(taskBox.CheckedItems != null)
    {
        foreach (object itemChecked in taskBox.CheckedItems)
        {
            string s = taskBox.GetItemCheckState(taskBox.Items.IndexOf(itemChecked)).ToString();
            fTaskBox.Items.Add(s);
            taskBox.Items.Remove(s);
        }
    }
}

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Проблема в том, что событие ItemCheck на CheckedListBox срабатывает до того, как элемент CheckState действительно изменится. Это означает, что элемент, который был только что нажат, еще не был добавлен в список CheckedItems, когда вы зацикливаетесь на нем. Он работает при втором щелчке, потому что элемент, который вы проверили при первом щелчке, находится в списке CheckedItems к этому моменту и попадает в цикл.

Один простой способ обойти проблему - это использоватьсобытие MouseUp вместо. Если вы перебираете CheckedIndices вместо CheckedItems, вам не нужен дополнительный код, чтобы попытаться выяснить индекс отмеченного элемента. Это должно сделать это:

private void TaskBox_MouseUp(object sender, MouseEventArgs e)
{
    foreach (int index in taskBox.CheckedIndices)
    {
        fTaskBox.Items.Add(taskBox.Items[index]);
        taskBox.Items.RemoveAt(index);
    }
}
0 голосов
/ 30 октября 2019

Вам необходимо создать список отмеченных элементов, чтобы можно было их удалить в блоке foreach . Попробуйте это:

foreach(var item in checkedListBox1.CheckedItems.Cast<object>().ToList())
{
    listBox1.Items.Add(checkedListBox1.GetItemText(item));
    checkedListBox1.Items.Remove(item);
}

Удачи.

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