代码之家  ›  专栏  ›  技术社区  ›  John

selectedIndexChanged的替代项在表单加载时不触发?

  •  4
  • John  · 技术社区  · 15 年前

    我正在用Visual Studio 2005在vb.net中开发。

    我在一个窗体上有一个组合框(mycombox),该窗体将被填充到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
    

    有人能给我指个方向吗?

    一如既往地感谢你。

    更新: 我使用的解决方案是在事件生成器之后删除handles子句,并将其添加到上面的“end sub”之前:

    AddHandler myCombo.SelectedIndexChanged, AddressOf myCombo_SelectedIndexChanged
    

    谢谢大家!

    3 回复  |  直到 14 年前
        1
  •  5
  •   SLaks    15 年前

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

        2
  •  10
  •   to StackOverflow    14 年前

    SelectionChangeCommitted是在 用户 更改组合框选择。

    从用于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。

        3
  •  1
  •   Zach Johnson    15 年前

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