如何保持checkedlistbox和结构同步
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
What I want to achive is when any of element of checkedlistbox is selected or deselected it must reflact on
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`,其中包含 sourceList 中的项目名称
事件处理程序是重要的一点。如果 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
我已经声明了一个结构
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
What I want to achive is when any of element of checkedlistbox is selected or deselected it must reflact on
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`,其中包含 sourceList 中的项目名称
事件处理程序是重要的一点。如果 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