Получение текста метки CheckBox из CheckedListBox - PullRequest
1 голос
/ 19 августа 2011

В настоящее время у меня есть CheckedListBox с несколькими полями. Я хочу иметь возможность проверить каждый флажок в списке, чтобы увидеть, если он установлен, и, если это так, добавить его текстовое значение (CheckBox.Text) в список строк.

Вот что у меня есть:

for ( int i = 0; i < multiTaskChecks.Items.Count; i++ )
{
    if ( multiTaskChecks.GetItemChecked(i) )
    {
        checkedMultiTasks.Add(multiTaskChecks.GetItemText(i));
    }
}

Используя это, GetItemText возвращает 0, 1, 2, 3 и т. Д. Вместо текстовых значений, которые мне нужны. Я также пытался CheckedListBox.Text.IndexOf(i), CheckedListBox.Text.ToList(), каждый без удачи.

Я просто не могу получить текст метки одного из этих CheckBoxes из CheckedListBox. Любая помощь с этим будет очень признателен.

Ответы [ 3 ]

5 голосов
/ 19 августа 2011

Во-первых, вы должны иметь возможность циклически просматривать только отмеченные элементы, например

foreach (var item in multiTaskChecks.CheckedItems)
{
}

, затем, в зависимости от типа item, получить любое желаемое свойство.Звучит так, будто это просто текст или вам нужна строка, поэтому

foreach (var item in multiTaskChecks.CheckedItems)
{
    checkedMultiTasks.Add(item.ToString());
}

или я предпочитаю

checkedMultiTasks.AddRange(multiTaskChecks.CheckedItems.
    OfType<object>().Select(‌​i => i.ToString()));
3 голосов
/ 19 августа 2011

Попробуйте это:

for (int i = 0; i < multiTaskChecks.Items.Count; i++)
{
    if (multiTaskChecks.GetItemChecked(i))
    {
        checkedMultiTasks.Add(multiTaskChecks.GetItemText(multiTaskChecks.Items[i]));
    }
}

Метод ListControl.GetItemText

ПРИМЕЧАНИЕ В отношении DisplayMember следует соблюдать осторожность:

If the DisplayMember property is not specified, the value returned by GetItemText is the value of the item's ToString method. Otherwise, the method returns the string value of the member specified in the DisplayMember property for the object specified in the item parameter.

1 голос
/ 19 августа 2011

Это должно работать:

var checkedMultiTasks = new List<string>();
foreach(var item in multiTaskChecks.CheckedItems) {
    checkedMultiTasks.Add(item.ToString());
}
...