我尝试这样设置:
ListBox lb = new ListBox();
/* Bind datas */
lb.SelectedItem = someObject;
lb确实选择了someObject项。但它会首先选择第一项。那个动作导致了我不想要的SelectedIndexChanged事件。
我只想在选择someObject时调用SelectedIndexChanged。 我该怎么做才能解决这个问题?
答案 0 :(得分:4)
使用表单/控件上的标志可以在您不希望触发事件时禁用该事件。
public class Form1 : Form
{
private bool itemsLoading;
public Form1()
{
InitializeComponent();
LoadListItems();
}
private void LoadListItems()
{
itemsLoading = true;
try
{
listBox1.DataSource = ...
listBox1.SelectedItem = ...
}
finally
{
itemsLoading = false;
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (itemsLoading)
return;
// Handle the changed event here...
}
}
答案 1 :(得分:1)
在将selectedItem更改为someObject之后才添加selectedIndexChanged事件?
从表单编辑器或designer.cs中删除该事件,并使用自动生成的相同代码手动添加它?