Распознать пункт CheckedListBox был выбран

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

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

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

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

То, что я также хочу знать, это сказать, если первый элемент индекса в CheckListBox проверен, а также 3-й, как я могу проверить, чтобы увидеть, если это правда или нет?

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

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

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

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() + ".");
}

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

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

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

Другие вопросы по тегам