我有一个ComboBox
的表单,提供了一个下拉列表。在comboBox的SelectedIndexChanged event
上,我正在运行一些代码,但我不希望在表单加载时运行该代码。不幸的是,当我加载表单时(在组合框中进行选择之前),组合框的SelectedIndexChanged
会激发(我认为组合框是databinding
时)。有没有办法避免这种行为?
答案 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)
在分配DataSource
和onload()
属性后,请务必在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
}
}