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 に答える