SelectedIndexChanged的替代品,不会在表单加载时触发?

时间:2009-12-24 00:22:51

标签: .net vb.net winforms combobox selectedindexchanged

我正在使用Visual Studio 2005在VB.NET中开发。

我在Load方法中填充的表单上有一个ComboBox(myCombo)。

我还处理了myCombo.SelectedIndexChanged来更改表单上的标签。

编辑:我添加事件处理程序的方法是双击设计器上的组合框。然后在代码视图中出现了骨架代码。

看起来正在发生的事情是表单加载时,每次将项添加到myCombo时都会触发SelectedIndexChanged。

这不是我想要的,但我认为还有另一个事件处理程序,只有在用户更改选择时才会被调用。

以下是我所拥有的一些代码:

Private Sub myDlg_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    ' this is all I do with myCombo in this sub

    list = GetListOfItemsToAdd()
    myCombo.DataSource = list 
    myCombo.DisplayMember = "DisplayMember"
    myCombo.ValueMember = "ValueMember"

End Sub

有人能指出我正确的方向吗?

一如既往地谢谢。

更新:我使用的解决方案是在事件生成器之后删除Handles子句,并在上面的“End Sub”之前添加它:

AddHandler myCombo.SelectedIndexChanged, AddressOf myCombo_SelectedIndexChanged

谢谢大家!

3 个答案:

答案 0 :(得分:10)

SelectionChangeCommitted是用户更改ComboBox选择时调用的事件处理程序。

来自SelectionChangeCommitted的MSDN文档:

  

仅当用户更改组合框选择时才会引发SelectionChangeCommitted。不要使用SelectedIndexChanged或SelectedValueChanged来捕获用户更改,因为当选择以编程方式更改时也会引发这些事件。

但请注意,有一个错误意味着在某些情况下不会触发SelectionChangeCommitted事件(具体来说:使用键盘下拉列表,滚动到一个新项目,然后选项卡到另一个控件。选择是已更改,但未触发SelectionChangeCommitted事件)。见http://connect.microsoft.com/VisualStudio/feedback/details/115189/selectionchangecommitted-event-sometimes-not-raised-by-combobox

在实践中我发现用户并不认为这是一个问题 - 因此我继续使用SelectionChangeCommitted而不是使用SelectedIndexChanged的其他变通方法。但是当然是YMMV。

答案 1 :(得分:5)

您只能在加载数据后添加事件处理程序。 (使用AddHandler关键字)

答案 2 :(得分:1)

您可以使用布尔值来确定您是否正在进行更改。当您开始更改项目时,请将其设置为true。完成后,将其设置为false。在事件处理程序中,您可以测试布尔值以确定用户是否是更改的发起者,如果不是则忽略该事件。