[英]how to keep checkedlistbox and a structure in sync
我已经声明了一个结构
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
但是它会产生运行时错误每个选择或取消选择的项目都不会反映在它对应的isChecked上
任何人都可以帮忙吗?
这似乎工作得很好。表单加载事件处理程序仅用于填充sourceList
并将其绑定到CheckedListbox'. This of course populates the
CheckedListbox'. This of course populates the
,这会使用sourceList中项目的名称CheckedListbox'. This of course populates the
CheckedListBox`。
事件处理程序很重要。 如果Checkbox
已被选中,它将取消选中该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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.