Winforms 停止组合框';s selectedIndexChanged事件在窗体加载时触发
我有一个带有组合框的表单,它提供了一个下拉列表。在组合框的Winforms 停止组合框';s selectedIndexChanged事件在窗体加载时触发,winforms,data-binding,combobox,Winforms,Data Binding,Combobox,我有一个带有组合框的表单,它提供了一个下拉列表。在组合框的SelectedIndexChanged事件中,我正在运行一些代码,但我不希望在加载表单时运行这些代码。不幸的是,当我加载表单时(在组合框中进行选择之前),组合框的SelectedIndexChanged会触发(我认为当组合框是数据绑定时)。有没有办法避免这种行为?您只需解除SelectedIndexChanged事件的绑定,调用fill函数并再次绑定SelectedIndexChanged事件。不幸的是,这不适用于网格 例如: this
SelectedIndexChanged事件中,我正在运行一些代码,但我不希望在加载表单时运行这些代码。不幸的是,当我加载表单时(在组合框中进行选择之前),组合框的SelectedIndexChanged
会触发(我认为当组合框是数据绑定时)。有没有办法避免这种行为?您只需解除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);
如果您只想在用户更改组合框中的选定项目时做出反应,那么最好订阅。为什么不设置一个布尔标志,指示您的表单何时完成加载
在SelectionChanged
事件中,检查boolean
标志是否为true
。如果是true
则处理该事件,否则忽略它。在分配ValueMember
和Datamember
属性后,确保在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句柄是否使用()方法创建。另一个增加的检查是检查用户是否真正关注combobox控件以更改所选索引
private void myComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (myComboBox.IsHandleCreated && myComboBox.Focused)
{
// Do something here
}
}
Boooooolean。。SelectionChangeCommitted非常好已经有一个布尔标志“Control.Created”告诉您表单已经完成加载,这对表单也是有效的。ToolStripComboBox
变体没有SelectionChangeCommitted
事件。因此,这种方法将不得不这样做。或者,为了防止竞争条件,使用lock
和Monitor.TryEnter
@user1734987:这不是一回事。可能有需要完成和控制的初始化代码。Created不会触发该代码。请添加更多详细说明您想法的信息。@Ranjith:您能详细说明吗?解决了问题。谢谢,但请详细说明。分配一个新数据源会触发一个“selectedIndexChanged”事件。不确定桌面上是否有此事件,但在.NET Compact中,此事件实际上似乎在Form_Load事件之前触发,这确实有问题-当此代码被命中时,表单上甚至没有设置任何内容。不幸的是,在CF上,解决方案是一个在加载结束时设置的表单变量,然后事件处理程序在触发该变量之前检查该变量。但是在自动补偿的情况下该怎么办?@Arijit Mukherjee right。在文本框中键入值而不是直接选择时。它不会触发SelectionChangeCommitted事件该死,我在网上搜索了很长一段时间才找到这样一个简单的解决方案。我一直在使用SelectionChanged事件,它在VB.Net-WPF中工作,现在在C#-WinForms上使用它,但它不工作,或者可能只是我一个人。谢谢Akams Razor-最简单的解决方案是最有可能的(在这种情况下也是最好的)。SelectionChangeCommitted将停止调用索引更改项目,一旦所有项目加载到dropbox中,您就可以逐个选择,这也将提高您的加载速度。您需要添加SelectedValue!=空检查也是一个很好的解决方案。是的,这也是一个很好的附加检查。