2011-08-19 105 views
1

我目前有一个带有几个框的CheckedListBox。我希望能够测试列表中的每个复选框以查看它是否被选中,如果是,则将其文本值(CheckBox.Text)添加到字符串列表中。从CheckedListBox获取CheckBox的标签文本

以下是我有:

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的标签文本。任何帮助,这将非常感激。

回答

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())); 
+0

+1简洁(但可读)的方式来做到这一点。 – Tim

+0

你的第二个例子不编译... –

+0

我不想编辑你的答案,或者将它添加到我的,但这是你需要做的:'checkedMultiTasks.AddRange(multiTaskChecks.CheckedItems.OfType ().Select(i => i.ToString()));' –

3

试试这个:

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

ListControl.GetItemText Method

注意有此方法就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

这应该工作:

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