Как перебрать проверенный список, доступ к которому осуществляется через элементы управления Windows? - PullRequest
2 голосов
/ 24 июня 2010

Я хотел бы пройтись по проверенному списку и посмотреть, какие значения возвращаются. Это не проблема, я знаю, что могу сделать это с помощью:

if(myCheckedListBox.CheckedItems.Count != 0)
{
   string s = "";
   for(int i = 0; i <= myCheckedListBox.CheckedItems.Count - 1 ; i++)
   {
      s = s + "Checked Item " + (i+1).ToString() + " = " + myCheckedListBox.CheckedItems[i].ToString() + "\n";
   }
   MessageBox.Show(s);
}

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

   foreach (Control c in table.Controls)
    {
        if (c is TextBox)
        {
            // Do things, that works
        }
        else if (c is CheckedListBox)
        {
            // Run the code I've written above
        }

Проблема в том, что, когда я пытаюсь получить доступ к элементу управления следующим образом: if (c.CheckedItems.Count != 0), он даже не находит свойство CheckedItems для Control c. Есть ли другой способ получить доступ к этому свойству выбранного элемента управления, и я смотрю на него неправильно? Заранее спасибо.

С уважением,

1 Ответ

3 голосов
/ 24 июня 2010

Вам необходимо привести c в качестве CheckedListBox:

((CheckedListBox)c).CheckedItems;

Или, если вы хотите сохранить ссылку на правильный тип, вы можете сделать следующее:Вы использовали первый пример, это было бы так:

int count = ((CheckedListBox)c).Count;
((CheckedListBox)c).ClearSelected();

Так что, очевидно, 2-й пример лучше, когда вам требуется несколько операций над элементом управления Cast.1013 *

   foreach (Control c in table.Controls)
   {
      if (c is TextBox)
      {
         // Do things, that works
      }
      else if (c is CheckedListBox)
      { 
         CheckedListBox box = (CheckedListBox)c;
         // Do something with box
      }
   }
...