在表单加载时停止 comboBox 的 selectedIndexChanged 事件的触发

我有一个提供下拉列表的 ComboBox表单。在 comboBox 的 SelectedIndexChanged event上,我正在运行一些代码,但是我不希望这些代码在表单加载时运行。不幸的是,当我加载表单时(在组合框中进行选择之前) ,组合框的 SelectedIndexChanged会触发(我认为当组合框为 databinding时)。有办法避免这种行为吗?

90351 次浏览

您可以简单地解除 SelectedIndexChanged事件的绑定,调用您的 fill函数并再次绑定 SelectedIndexChanged事件。不幸的是,这不适用于网格。

例如:

this.cmb.SelectionChanged -= new System.EventHandler(this.cmb_SelectionChanged);
cmb.fill(); //Your function
this.cmb.SelectionChanged += new System.EventHandler(this.cmb_SelectionChanged);

如果您只想在用户更改组合框中的选定项时作出反应,那么最好订阅 更改提交

为什么不有一个 boolean标志,表明当您的 Form已经完成加载?

SelectionChanged事件中,检查 boolean标志是否为 true。如果是 true,则处理该事件,否则忽略它。

在分配 ValueMemberDatamember属性之后,一定要在 onload()函数中设置 DataSource属性。

这将帮助你解决你的问题!

VB

RemoveHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged
lbxNomes.DataSource = dst
Label1.Text = String.Format("Encontrados {0} Sócios nesta pesquisa", dst.Rows.Count)
Label1.Visible = True
AddHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged

它在以下代码中对我起作用:

  private void ddlChapter_SelectionChangeCommitted(object sender, EventArgs e)
{
if (ddlChapter.SelectedValue != null)
{
// Do something here
}
}

这里有一个简单的解决方案,可以让你的代码几乎不受影响:

在 SelectedIndexChanged 事件中,检查 myComboBox 句柄是否使用(IsHandleCreated)方法创建。另一个添加的检查是检查用户是否实际上将组合框控件的焦点集中在更改选定的索引上。

 private void myComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (myComboBox.IsHandleCreated &&  myComboBox.Focused)
{
// Do something here
}
}