我的页面中有3个ListBoxes。我想从ListBox中删除一个选定的项目。在ListBox1中,它工作得很好但是当我从其他ListBox中选择项目并单击删除时 - 它总是删除第一个项目。
protected void Button4_Click(object sender, EventArgs e)
{
if (ListBox1.SelectedIndex != -1)
{
ListBox1.Items.Remove(ListBox1.SelectedItem);
}
else if (ListBox2.SelectedIndex != -1)
{
ListBox2.Items.Remove(ListBox2.SelectedItem);
}
else if (ListBox3.SelectedIndex != -1)
{
ListBox3.Items.Remove(ListBox3.SelectedItem);
}
}
答案 0 :(得分:3)
这是因为您的else if
声明无法覆盖您的其他陈述。
试试这个:
protected void Button4_Click(object sender, EventArgs e)
{
if (ListBox1.SelectedIndex != -1)
ListBox1.Items.Remove(ListBox1.SelectedItem);
if (ListBox2.SelectedIndex != -1)
ListBox2.Items.Remove(ListBox2.SelectedItem);
if (ListBox3.SelectedIndex != -1)
ListBox3.Items.Remove(ListBox3.SelectedItem);
}
答案 1 :(得分:1)
如果你想要删除ListBox项,你应该总是检查所有ListBox的所选项目,如果没有选择第一个ListBox那么你当前的代码就会检查你写的ListBox的其余部分if-else阻止。
因此改变如下:
protected void Button4_Click(object sender, EventArgs e)
{
if (ListBox1.SelectedIndex != -1)
{
ListBox1.Items.Remove(ListBox1.SelectedItem);
}
if (ListBox2.SelectedIndex != -1)
{
ListBox2.Items.Remove(ListBox2.SelectedItem);
}
if (ListBox3.SelectedIndex != -1)
{
ListBox3.Items.Remove(ListBox3.SelectedItem);
}
}
答案 2 :(得分:1)
绝对不是措辞最好的问题。
也许您只想删除上次使用的ListBox中当前所选的项目?
如果是这样,创建一个Form级别变量来跟踪ListBox最后一次更改其SelectedIndex:
public partial class Form1 : Form
{
private ListBox CurrentListBox = null;
public Form1()
{
InitializeComponent();
ListBox1.SelectedIndexChanged += new EventHandler(ListBox_SelectedIndexChanged);
ListBox2.SelectedIndexChanged += new EventHandler(ListBox_SelectedIndexChanged);
ListBox3.SelectedIndexChanged += new EventHandler(ListBox_SelectedIndexChanged);
}
void ListBox_SelectedIndexChanged(object sender, EventArgs e)
{
CurrentListBox = (ListBox)sender;
}
private void button4_Click(object sender, EventArgs e)
{
if (CurrentListBox != null && CurrentListBox.SelectedIndex != -1)
{
CurrentListBox.Items.Remove(CurrentListBox.SelectedItem);
}
}
}