2009-09-05 57 views
2

我有我的用戶控制主機數的WinForms列表框控件。我想在這個用戶控件中的行爲是我只希望其中一個列表框一次具有選定的項目。列表框ClearSelected法葉所選項目

所以,如果我有選擇的在listBox1中的項目,我點擊列表框listbox2一個項目應該是自動的所有商品取消。

我試圖用下面的代碼來實現:

dim listBox as listbox 
    For Each listName As String In _listboxes.Keys 
     If listName <> listboxName Then 
      listbox = me.controls(listName) 
      listbox.ClearSelected() 
     End If 
    Next 

我存儲在字典中的列表框的名稱。 (列表框的數量是動態的)。這個例子中的listBoxName是剛剛點擊的列表框,所以這段代碼避免了清除該框中的選擇。

行爲,當我運行這段代碼是很意外,我得到。可以說我有3個列表框... listbox1,listbox2和listbox3。假設當前選擇了listbox2中的item3。如果我點擊listbox1的第4項,那麼最後的結果就是選擇了listbox1中的第4項(按預期),但是listbox2已經選擇了第1項。

總之,以前有一個項目選擇仍然第1項選擇,而不是被清除選項的列表框。

我的ClearSelection方法調用後立即發出一個debug.print listBox.SelectedItems.Count果然它說,1項被選中。

如何做到這一點或修復我的代碼有什麼想法?

賽斯

編輯:BTW,我綁定的列表框,以業務對象的集合。

回答

2

我跑了一個簡單的例子,2個列表框,並得到了這個方法的工作:通過您的所有列表框

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
     Handles ListBox1.Click, ListBox2.Click 
    Dim lbx As ListBox = CType(sender, ListBox) 
    Dim i As Integer = lbx.SelectedIndex 
    ListBox1.ClearSelected() 
    ListBox2.ClearSelected() 

    lbx.SelectedIndex = i 

End Sub 

就循環,調用ClearSelected方法,然後重新選擇觸發事件之一。不要在.SelectedIndex事件中運行此代碼,這會使您陷入無限循環,並很快導致崩潰。

相關問題