4

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

我在加载方法中填充的表单上有一个组合框(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

谢谢大家!

4

3 回答 3

10

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

来自 SelectionChangeCommitted 的 MSDN 文档:

仅当用户更改组合框选择时才会引发 SelectionChangeCommitted。Do not use SelectedIndexChanged or SelectedValueChanged to capture user changes, because those events are also raised when the selection changes programmatically.

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

在实践中,我发现用户并不认为这是一个问题——所以我继续使用 SelectionChangeCommitted,而不是使用 SelectedIndexChanged 的​​其他解决方法。但当然是 YMMV。

于 2009-12-24T06:48:27.433 回答
5

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

于 2009-12-24T00:26:28.490 回答
1

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

于 2009-12-24T00:41:47.113 回答