我有一个只包含空ComboBox的表单。 我将DataSource设置为空的BindingList。 当我向BindingList添加一些内容时,它被选中并且combobox1.SelectedIndex发生了变化,但事件comboBox1_SelectedIndexChanged并没有被提升,甚至在我看来应该很难。为什么不提出?删除单个项目时,将正确触发comboBox1_SelectedIndexChanged。
public partial class Form1 : Form
{
public Form1()
{
var test_ = new BindingList<int>();
InitializeComponent();
comboBox1.DataSource = test_;
Console.WriteLine(comboBox1.SelectedIndex); // -1
test_.Add(42); // BUG? no comboBox1_SelectedIndexChanged -> 0
Console.WriteLine(comboBox1.SelectedIndex); // 0
test_.Remove(42); // comboBox1_SelectedIndexChanged -> -1
Console.WriteLine(comboBox1.SelectedIndex); // -1
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("index changed " + comboBox1.SelectedIndex);
}
}
答案 0 :(得分:0)
你的逻辑不正确。
comboBox1.SelectedIndex
-1
并不意味着您在item
位置选择了-1
!
这意味着comboBox1
中没有选择任何项目。
添加项目后,SelectedIndex
变为0
。选择上没有更改,因为首先选择了没有商品 (SelectedIndex = -1)。
答案 1 :(得分:0)
解决这个问题的一种方法是使用您正在使用的BindingList集合的ListChanged事件:
var test_ = new BindingList<int>();
comboBox1.DataSource = test_;
test_.ListChanged += (sender, e) => {
if (e.ListChangedType == ListChangedType.ItemAdded && test_.Count == 1) {
comboBox1_SelectedIndexChanged(comboBox1, EventArgs.Empty);
}
};
test_.Add(42);