2013-09-29 3 views
1

У меня возникла проблема с отображением списка checklistbox в окне сообщений для приложения Windows. Я получаю только последний выбранный для отображения. Например, я выбираю «один, три и пять», только пять дисплеев.Ошибка выбора контрольного списка в окне сообщения

Вот мой код:

 string display = ""; 
     foreach (object selectedItems in clb.CheckedItems) 
     {    
      if (clb.SelectedItems.Count != 0) 
      { 
       display = "Items needed\n-----------\n\n\n" + selectedItems.ToString(); 
      } 
      else 
      { 
       display = "No items selected"; 
      } 
     } 
      MessageBox.Show(display, "Title"); 

Любые идеи, мне точку в правильном направлении, чтобы выполнить это ценится.

ответ

0

Ваша ошибка в цикле, который начинается до испытания количество выбранных/выбранных элементов. Ваш цикл продолжает изменять значение отображения переменной в каждом цикле. В конце переменная содержит только последний элемент checked/selectd.

Итак, я предполагаю, что вы хотите отобразить отмеченные элементы, а не выбранные элементы.
В любом случае вам необходимо выполнить цикл над сборкой (ChekedItems в этом случае) и скопировать в строкоструйном тексты элементов, которые вы хотите отобразить.

string display = ""; 

// Every item in this collection is an item 
// with CheckState = Checked or Indeterminate 
if (clb.CheckedItems.Count != 0) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach(string item in clb.CheckedItems) 
     sb.AppendLine(item); 
    display = "Items needed\n-----------\n\n\n" + sb.ToString(); 
} 
else 
{ 
    display = "No items checked"; 
} 
MessageBox.Show(display, "Title"); 

Если вы действительно хотите, чтобы петли на SelectedItems, код такой же, но просто использовать коллекцию SelectedItems

+0

Спасибо, это работает! – user1863593

0

вам нужно Concat выбранные элементы как display += или лучше использовать Stringbuilder

display += " Items needed\n-----------\n\n\n" + selectedItems.ToString(); 

ИЛИ вы можете сделать, как показано ниже

if(clb.CheckedItems.Count >0) 
    display = "Items needed\n-----------\n\n\n" + string.Join(",", clb.CheckedItems.Select(i=>i.ToString())); 
else 
    display = "No items selected"; 
Смежные вопросы