访问ListBox.Item [i] IsSelected属性

时间:2014-02-05 18:47:43

标签: c# listbox listboxitem

我有一个列表框,并添加了一个字符串数组

static sting[] demo = new string[] {"cat", "dog", "bird", "horse"};

public Form1()
{
    InitializeComponent();

    ListBox1.Items.AddRange(demo);

}

然后在其他地方我试图根据列表框的选定项目创建一个bool数组(启用了多选)...

*我想要做的逻辑

//somewhere...
bool[] b = new bool[] { false, false, false, false};


//somewhere else
for(int i=0; i<4; i++)
{
    b[i] = ListBox1.Items[i].IsSelected;
}

这不起作用。我无法访问.Items [i]属性并且只有方法可用(在这种情况下是无意义的:Equals(),GetHashCode(),GetType(),ToString())。

对selectedIndices使用foreach循环将不起作用,因为它只会给我选择的那些(我需要遍历每个项目值true | false)。

我尝试添加System.Windows.Controls.ListBoxItem,但这也不起作用......

System.Windows.Controls.ListBoxItem[] myItems = new System.Windows.Controls.ListBoxItem[4];

public Form1()
{
    InitializeComponent();

    for(int i = 0; i < 4; i++)
    {
      myItems[i] = new System.Windows.Controls.ListBoxItem();
      myItems[i].Content = demo[i];
      listbox1.Items.Add(myItems[i].Content);
    }
 }

这一部分很好,但后来当我尝试循环通过ListBoxItems时,它会向ListBoxItem抛出一个字符串抛出错误(即使我将它添加为ListBoxItem对象???)

再一次,逻辑我正在尝试*做但不工作

bool tmp;
foreach(System.Windows.Controls.ListBoxItem li in listbox1.Items)
{
   tmp = li.IsSelected;
   // do something
}

我认为尝试for循环(实际上我需要反过来指向bool数组)会以同样的方式失败。我不需要使用ListBoxItem类(实际上更多的引用添加所以我宁愿不使用它)但我认为它可以正常工作。必须有一种更有效的方法来做到这一点。另外我还想知道为什么当我将listboxitem对象添加到列表框时,为什么当我稍后尝试循环时它会出现类型转换错误。

2 个答案:

答案 0 :(得分:0)

您没有标记您的问题,但看起来您正在将WPF类与WinForms项目混合。

要模仿IsSelected属性,可以使用以下内容:

for (int i = 0; i < 4; i++) {
  b[i] = listBox1.SelectedIndices.Contains(i);
}

答案 1 :(得分:-1)

你试过这样的事吗?

for(int i=0; i<4; i++)
{
    if(ListBox1.Items[i].IsSelected)
        b[i] = true;
}

我认为编译器在运行之前没有IsSelected()的值。