2017-08-11 3 views
0

J'ai déclaré une structurecomment garder CheckedListBox et une structure en phase

Public Structure cList 
     Public Name As String 
     Public Path As String 
     Public isChecked As Boolean 
    End Structure 

et les variables de celui-ci -

Public sourceList As New List(Of cList) 
    Public source As cList 

Et j'ai un CheckedListBox

Ce que je veux achive est lorsque l'un des éléments de checklistbox est sélectionné ou désélectionné, il doit refléter

 sourceList.isChecked = False 'When Deselected 

ou

 sourceList.isChecked = True 'When Selected 

Eh bien cela ne fonctionnera pas ici pour cela et j'achive utilisé ici une technique dans cette ex.

For index = 0 To sourceList.Count - 1 
       source = sourceList(index) 
       'by this way I can access every source(item) of sourceList 
       source.Name = "test"  
       any changes 
       sourceList.Add(source) 
       'changes are reflecting to sourceList 
      Next 

Pour ACHIVE synchronisation de checkedListBox.CheckedItems et sourceList.isChecked j'écrit ce code

 'First making isChecked value to false for every property in sourceList 
      For index = 0 To sourceList.Count - 1 
       source = sourceList(index) 
       source.isChecked = False 
       sourceList.Add(source) 
      Next 
    'Now assigning isChecked=true for Checked items of listbox 
      For Each item As String In CheckedListBox1.CheckedItems 
       For index = 0 To sourceList.Count - 1 
        source = sourceList(index) 
        If item = source.Name Then 
         source.isChecked = True 
         sourceList.Add(source) 
        End If 
       Next 
      Next 

mais il donne des erreurs d'exécution Chaque élément sélectionné ou désélectionné n'a pas reflact sur son correspondant isChecked

Quelqu'un s'il vous plaît aider ??

Répondre

0

Cela semble fonctionner très bien .. Le gestionnaire d'événement de chargement de formulaire est juste là pour remplir le sourceList et de se lier à la CheckedListbox'. This of course populates the CheckedListBox` avec les noms des objets dans SourceList

Le gestionnaire d'événements est le bit important. Si le Checkbox est déjà coché, il sera décoché et marquera l'élément avec la même valeur d'index dans la propriété sourceList 'isChecked` comme faux. Si la case n'est pas cochée, cela fera l'inverse.

Public Class cList 
    Property Name As String 
    Property Path As String 
    Property IsChecked As Boolean 
End Class 

Public sourceList As New List(Of cList) 
Public source As cList 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    sourceList.Add(New cList With {.Name = "first", .Path = "firstpath", .IsChecked = False}) 
    sourceList.Add(New cList With {.Name = "second", .Path = "secondpath", .IsChecked = False}) 
    sourceList.Add(New cList With {.Name = "third", .Path = "thirdpath", .IsChecked = False}) 
    CheckedListBox1.DataSource = sourceList 
    CheckedListBox1.DisplayMember = "Name" 
End Sub 

Private Sub CheckedListBox1_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck 
    If e.CurrentValue = CheckState.Checked Then 
     e.NewValue = CheckState.Unchecked 
     sourceList.Item(e.Index).IsChecked = False 
    Else 
     e.NewValue = CheckState.Checked 
     sourceList(e.Index).IsChecked = True 
    End If 
    MessageBox.Show(sourceList(e.Index).Name & " " & sourceList(e.Index).IsChecked) 
End Sub