1

我目前有一个带有几个框的 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()一个都没有任何运气。

我只是无法从 CheckedListBox 中获取这些 CheckBox 之一的标签文本。对此的任何帮助将不胜感激。

4

3 回答 3

5

首先,您应该只能像这样循环检查项目

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()));
于 2011-08-19T04:59:35.100 回答
3

尝试这个:

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.

于 2011-08-19T04:54:45.167 回答
1

这应该有效:

var checkedMultiTasks = new List<string>();
foreach(var item in multiTaskChecks.CheckedItems) {
    checkedMultiTasks.Add(item.ToString());
}
于 2011-08-19T04:55:33.227 回答