0

我想创建一个 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;
        }
    }
4

3 回答 3

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); 
    }
}

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

于 2012-06-26T17:27:18.837 回答
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);
    }
}
于 2012-06-26T17:30:44.110 回答
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 属性)。

于 2012-06-26T17:29:00.943 回答