繁体   English   中英

如何保持清单框和结构同步

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM