Распознать выбранный элемент CheckedListBox

До сих пор я никогда не имел дело с checkedListBox1. Программа, которую я хочу сделать, выиграет от ее использования, а не от многочисленных флажков.

У меня есть код:

private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    int selected = checkedListBox1.SelectedIndex;
    this.Text = checkedListBox1.Items[selected].ToString();
}

Проблема в том, что каждый раз, когда я нажимаю на поле, и он выделяется, он затем выбирает выделенный объект. Я ищу, чтобы распознать изменение в том, что было выбрано, а не выделено.

Я также хочу знать, что если первый элемент индекса в CheckListBox отмечен, а также третий, как мне проверить, истинно это или нет?

Я уверен, что в конце концов разберусь с этим, но просмотр кода очень поможет.

Скажем, у меня есть 3 окна: Box A = messageBox.Show ("a"); Поле B = messageBox.Show("b"); Поле C = messageBox.Show("c");

Он будет отображать mbox только в том случае, если флажок установлен. Я хочу знать, как я могу проверить, отмечены ли, например, A и C, чтобы, если я нажал кнопку, два messageBoxes отображали либо «a», а затем «c»


person Pichu    schedule 25.10.2012    source источник
comment
Вы пробовали OnItemCheck?   -  person Rudi Visser    schedule 25.10.2012
comment
Winforms, извините, я должен добавить это.   -  person Pichu    schedule 25.10.2012
comment
rudi_visser, не могли бы вы показать мне пример?   -  person Pichu    schedule 25.10.2012


Ответы (2)


   private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        // a checkbox is changing
        // but value is not updated yet

    }

    private void checkedListBox1_MouseUp(object sender, MouseEventArgs e)
    {
        Debug.WriteLine(checkedListBox1.CheckedItems.Count);
        Debug.WriteLine(checkedListBox1.CheckedItems.Contains(checkedListBox1.Items[0]));
    }

Я думаю, вы должны проверить это в MouseUp, проверено ли 1-е. а _ItemCheck — когда флажок меняется, но значение еще не обновлено.

См. ссылку: http://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.items.aspx

   // First show the index and check state of all selected items. 
foreach(int indexChecked in checkedListBox1.CheckedIndices) {
    // The indexChecked variable contains the index of the item.
    MessageBox.Show("Index#: " + indexChecked.ToString() + ", is checked. Checked state is:" +
                    checkedListBox1.GetItemCheckState(indexChecked).ToString() + ".");
}

// Next show the object title and check state for each item selected. 
foreach(object itemChecked in checkedListBox1.CheckedItems) {

    // Use the IndexOf method to get the index of an item.
    MessageBox.Show("Item with title: \"" + itemChecked.ToString() + 
                    "\", is checked. Checked state is: " + 
                    checkedListBox1.GetItemCheckState(checkedListBox1.Items.IndexOf(itemChecked)).ToString() + ".");
}
person urlreader    schedule 25.10.2012
comment
Всякий раз, когда я нажимаю на первый (значение = 0), третий (значение = 2) и все последующие, я получаю bool = False, но для второго отмеченного элемента я получаю возврат True. Позвольте мне отредактировать мой основной пост, чтобы прояснить ситуацию. - person Pichu; 25.10.2012
comment
Что помогает. Я могу работать с тем, что там есть, удивляюсь, как я не наткнулся на эту страницу Microsoft. - person Pichu; 25.10.2012

Если вы хотите получить коллекцию всех проверенных элементов, используйте checkedListBox1.CheckedItems. Чтобы отобразить все отмеченные элементы при нажатии кнопки, используйте следующее:

private void button1_Click(object sender, EventArgs e)
{
    for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
        MessageBox.Show(checkedListBox1.CheckedItems[i].ToString());
}

Если вам нужны только их индексы, используйте вместо этого checkedListBox1.CheckedIndices.

person ePandit    schedule 25.01.2015