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

时间:2010-07-16 08:45:32

标签: winforms data-binding combobox

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

7 个答案:

答案 0 :(得分:133)

如果您只想在用户更改组合框中的所选项目时做出反应,那么最好订阅SelectionChangeCommitted

答案 1 :(得分:11)

您可以简单地取消绑定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);

答案 2 :(得分:6)

在分配DataSourceonload()属性后,请务必在ValueMember函数中设置Datamember属性。

这将帮助您解决问题!

答案 3 :(得分:5)

为什么没有boolean标记表明Form何时完成加载?

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

这是一个简单的解决方案,可让您的代码几乎保持不变:

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

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

答案 6 :(得分:-1)

使用以下代码对我有用:

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