我在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> - 为什么这个事件会被解雇?如何确保仅在索引更改时触发?
答案 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用户控件,但我认为你不需要它。