2

我在一个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没有改变——那么为什么会触发这个事件呢?如何确保它仅在索引更改时触发?

4

1 回答 1

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 用户控件,但我认为您不需要它。

于 2013-01-21T20:43:17.120 回答