我有一个包含下拉列表的表单,使用了ComboBox
。在comboBox的SelectedIndexChanged事件
中运行一些代码,但是我不希望在表单加载时运行该代码。不幸的是,当我加载表单(在选择combobox之前),combobox的SelectedIndexChanged
就会触发(我认为是在combobox进行databinding
时)。有没有方法避免这种行为?
我有一个包含下拉列表的表单,使用了ComboBox
。在comboBox的SelectedIndexChanged事件
中运行一些代码,但是我不希望在表单加载时运行该代码。不幸的是,当我加载表单(在选择combobox之前),combobox的SelectedIndexChanged
就会触发(我认为是在combobox进行databinding
时)。有没有方法避免这种行为?
您可以简单地解绑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);
在为 ValueMember
和 Datamember
属性分配值后,在您的 onload()
函数中一定要设置 DataSource
属性。
这将有助于解决您的问题!
为什么不设置一个布尔标志来指示您的表单何时完成加载?
在您的SelectionChanged
事件中,检查boolean
标志是否为true
。如果是true
,则处理该事件,否则忽略它。
Control.Created
告诉您,窗体已经完成加载,这对于窗体也是有效的。 - user1734987 private void myComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (myComboBox.IsHandleCreated && myComboBox.Focused)
{
// Do something here
}
}
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
}
}