2009-12-30 6 views
1

Découvrez le simple code ci-dessous:WinForms - VB.NET - Passing même liste que DataSource pour deux listboxes différents créent des problèmes

Public Class Form1 
    Private _items As List(Of String) = New List(Of String) 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     _items.Add("Item1") 
     _items.Add("Item2") 
     _items.Add("Item3") 

     ListBox1.DataSource = _items 
     ListBox2.DataSource = _items 
    End Sub 
End Class 

Ce qui se passe est que lorsque le Item2 est sélectionné dans la première zone de liste, la deuxième listbox change automatiquement son élément sélectionné en Item2. Cela arrive exactement de la même manière avec l'autre listbox.

Une idée de pourquoi cela se passe-t-il?

Répondre

3

C'est parce que vos deux ListBoxes partagent par défaut l'objet BindingContext du formulaire. Pour changer ceci, créez explicitement un BindingContext pour chaque ListBox.

+0

droit sur une réponse! –

1

Oui, ça va arriver. Lorsque vous liez un DataSource à un contrôle, le contrôle se lie aux événements de DataSource et appelle ses méthodes en interne. Des événements tels que SelectionChanged, CurrentRecordChanged (pas sûr des noms exacts) sont déclenchés par le DataSource.

Par exemple. Lorsque vous sélectionnez un élément dans ListBox1, la zone de liste modifie le pointeur d'enregistrement en cours dans le DataSource, lequel inturn génère un événement tel que CurrentRecordChanged. Cet événement est capturé par listbox2 (également par listbox1) et change son enregistrement actuel.

1

Essayez cette

using System.Linq; 

    ListBox1.DataSource = _items.ToArray(); 
    ListBox2.DataSource = _items.ToArray();