当索引未更改时,Listbox事件SelectedIndexChanged将触发

时间:2013-01-21 20:30:05

标签: .net vb.net winforms

我在winforms后面有这个代码,它只有listbox作为唯一控件:

Imports System.Windows.Forms
Public Class Form1

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        ListBoxX.Items.Add("hello")
        ListBoxX.Items.Add("world")
        ListBoxX.Items.Add("foo")
        ListBoxX.Items.Add("bar")

    End Sub

    Private Sub ListBoxX_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBoxX.SelectedIndexChanged
        MessageBox.Show("change registered")
    End Sub

    Private Sub ListBoxX_SelectedValueChanged(sender As Object, e As System.EventArgs) Handles ListBoxX.SelectedValueChanged
        MessageBox.Show("change registered X")
    End Sub
End Class

如果选择了“hello”,然后我点击“hello”,则会出现消息框 - 当然如果我点击同一项目,那么 SelectedIndex 未更改< / strong> - 为什么这个事件会被解雇?如何确保仅在索引更改时触发?

1 个答案:

答案 0 :(得分:3)

检查事件内部是否与之前选择的项目相同,

点击时保存最后选择的项目。

Private Sub ListBoxX_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBoxX.SelectedIndexChanged
    if Not LastItem = ListBoxX.SelectedItem Then
        MessageBox.Show("change registered")
        LastItem = ListBoxX.SelectedItem 
    end if
End Sub

自从我在VB中编码以来已经有一段时间了,所以我希望这段代码没问题。

我认为无论选择哪个项目,事件都会一直触发。

另一个解决方案是覆盖ListBox用户控件,但我认为你不需要它。