如何将selectedIndex与listBox中的字符串进行比较

时间:2012-06-26 17:23:12

标签: c# winforms

我想创建一个if语句,用于识别从特定列表框中删除了哪个字符串。我以为我可以做一个类似于下面的if声明,并让它工作,但它告诉我它有无效的争论 - 如果有人可以指导我会赞赏

private void button2_Click(object sender, EventArgs e)
    {

        listBox2.Items.RemoveAt(listBox2.SelectedIndex); 
        if(listBox2.Items.RemoveAt(listBox2.SelectedItems.ToString().Equals("Test")))
        {
         picturebox.Image = null;
        }
    }

3 个答案:

答案 0 :(得分:3)

您需要在删除之前检查SelectedItem

private void button2_Click(object sender, EventArgs e)
{
    if (listBox2.SelectedIndex != -1)
    {
        if (listBox2.SelectedItem.ToString().Equals("Test")))
            picturebox.Image = null;

        listBox2.Items.RemoveAt(listBox2.SelectedIndex); 
    }
}

我还添加了一项检查以确保实际选择了某个项目(否则会出现错误)。

答案 1 :(得分:1)

您的问题是您正在调用ListBox.Items.RemoveAt(int index)并传入一个布尔值:listBox2.SelectedItems.ToString().Equals("Test"))

此外,您首先删除该项目,然后再次调用RemoveAt,这实际上将删除一个不同的项目(现在该索引处的任何内容),或者如果您已经外出则抛出异常您的ListBox集合的边界。

您应首先检查所选项目是否等于“测试”,然后从ListBox中删除该项目,如下所示:

private void button2_Click(object sender, EventArgs e)
{
    // SelectedIndex returns -1 if nothing is selected
    if(listBox2.SelectedIndex != -1)
    {
        if( listBox2.SelectedItem.ToString().Equals("Test") )
        {
            picturebox.Image = null;
        }
        listBox2.Items.RemoveAt(listBox2.SelectedIndex);
    }
}

答案 2 :(得分:0)

您应该执行以下操作:

    String deletedString = listBox2.Items.ElementAt(listBox2.SelectedIndex).ToString();
    listBox2.Items.RemoveAt(listBox2.SelectedIndex); 
    if(listBox2.Items.RemoveAt(deletedString == "Test"))
    {
     picturebox.Image = null;
    }

它可能无法编译(检查Items是否具有SelectedItem属性)。