2013-01-21 20 views
2

我有一個WinForms這背後的代碼,只是有一個listbox作爲其唯一的控制:列表框事件的SelectedIndexChanged火災時,指數並沒有改變

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 

如果「你好」被選中,然後我點擊「你好」然後消息框出現 - 當然,如果我點擊相同的項目然後SelectedIndex沒有改變 - 那麼爲什麼這個事件發射?我如何確保它只在索引更改時觸發?

回答

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編碼,所以我希望這段代碼是好的。

我認爲無論選擇哪個項目,事件總是會觸發。

另一種解決方案是重寫列表框用戶控件,但我認爲你不需要這樣做。

+0

因此創建一個字段'LastItem'並檢查每次? – whytheq

+0

創建一個字符串,你可以創建一個整數來保存索引 - 這是更好的。 – Guy