2017-08-11 26 views
0

我已经声明了一个结构呢如何保持checkedlistbox和

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

和变量同步的结构 -

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

而且我有一个CheckedListBox

我想才达到什么是当checkedlistbox的任何元素被选中或取消选择时,它必须在

 sourceList.isChecked = False 'When Deselected 

 sourceList.isChecked = True 'When Selected 

嗯,这不会在这里工作,以实现这一目标,我在这前这里使用的技术。

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 

为了更好地实现checkedListBox.CheckedItems的同步和sourceList.isChecked我写这段代码

 '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 

但它提供了运行时错误 或取消选中它并没有reflact每个项目的相应

器isChecked

任何人请帮助?

回答

0

这似乎只是正常工作。该窗体加载事件处理程序只是为了填充sourceList并将其与项目中SOURCELIST

名称的事件处理程序是绑定到CheckedListbox'. This of course populates the CheckedListBox`重要的一点。如果Checkbox已被选中,它将取消选中它,并在sourceList的属性“isChecked”中将具有相同索引值的项目标记为false。如果该复选框已被取消选中,则会执行相反的操作。

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