2

チェックされたリストボックスをループして、どの値が返されるかを確認したいと思います。それは問題ありません、私はそれができることを知っています:

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)見つからないことです。選択したコントロールのプロパティにアクセスする別の方法はありますか?それを間違って見ていますか?前もって感謝します。CheckedItemsControl c

敬具、

4

1 に答える 1

3

cをCheckedListBoxとしてキャストする必要があります。

((CheckedListBox)c).CheckedItems;

または、正しいタイプへの参照を保持する場合は、次のようにすることができます。

CheckedListBox box = c as CheckedListBox;
int count = box.CheckItems.Count;
box.ClearSelected();

最初の例を使用した場合、次のようになります。

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

したがって、キャストコントロールで複数の操作が必要な場合は、明らかに2番目の例の方が適しています。

アップデート:

   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
      }
   }
于 2010-06-24T08:52:36.850 に答える