2011-08-19 128 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()); 
}