我正在尝试从ComboBox Collection中删除所选项目:
我写了一个按钮点击:
cb01.Items.Remove(cb01.SelectedItem);.
这会删除该项目,但下次打开表单时,该项目会再次出现。 请帮忙。
答案 0 :(得分:1)
怎么样
if(cb01.SelectedItem != null)
cb01.Items.Remove(cb01.SelectedItem);
我为什么要检查?
因为在最后一行你说
cb01.Items.RemoveAt(cb01.SelectedIndex); // error: Value of '-1' is not valid...
-1是未选择任何项目时的组合索引。所以我先检查了所选项目。如果找到将进入if语句。
答案 1 :(得分:1)
为您的ComboBox添加KeyDown
事件,然后
private void cb01_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
if(cb01.SelectedIndex != -1)
cb01.Items.Remove(cb01.SelectedItem);
}
}
以上将从comboBox中删除项目,但如果您再次加载应用程序时按设计时间添加项目,则可以再次看到所有项目。
检查您的InitializeComponent()
方法。你可以看到下面的东西。
this.cb01.Items.AddRange(new object[] {
"item1",
"item2",
"item13"});
再次加载应用程序时,它会调用InitializeComponent
并调用上面的方法来添加项目。
避免此问题。您可以使用绑定数据源。例如,您可以从数据库中获取项目。当你删除时,你可以从数据库中删除它。下次加载应用程序时,它只显示数据库中的项目。
答案 2 :(得分:1)
将comboBox1
替换为组合框的名称并绑定其KeyDown
事件
void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
int currentItem = comboBox1.SelectedIndex;
if (e.KeyCode == Keys.Delete && currentItem != -1)
{
comboBox1.Items.RemoveAt(currentItem);
if (comboBox1.Items.Count > 0)
comboBox1.SelectedIndex = (currentItem > 0 ? currentItem - 1 : currentItem);
}
}
这将在删除后选择列表中的下一个项目,或者如果组合框中没有项目或者没有选择任何项目则不执行任何操作。