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

Joh*_*ohn 4 .net vb.net combobox selectedindexchanged winforms

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

我在一个表单上有一个ComboBox(myCombo),它在Load方法中填充.

我还处理了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
Run Code Online (Sandbox Code Playgroud)

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

一如既往地谢谢.

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

AddHandler myCombo.SelectedIndexChanged, AddressOf myCombo_SelectedIndexChanged
Run Code Online (Sandbox Code Playgroud)

感谢大家!

Joe*_*Joe 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当然.


SLa*_*aks 5

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

  • 从处理程序方法的定义中删除`Handles`子句. (2认同)
  • 一种方法是在设计器中选择ComboBox,转到属性Window,单击Events按钮,找到(并删除)SelectedIndexChanged项中的条目. (2认同)