Vb.net 如何在不重复之前的文本的情况下,将项目文本从CheckedListBox获取到ListBox?图书管理系统

Vb.net 如何在不重复之前的文本的情况下,将项目文本从CheckedListBox获取到ListBox?图书管理系统,vb.net,for-loop,checkedlistbox,Vb.net,For Loop,Checkedlistbox,我有一个包含10个名称a到J的CheckedListBox(这是一个字符串,但这里我只是使用abc),我希望这样,每次用户选中某个内容时,文本都会同时显示在列表框中。我试过这个: For i = 0 To chklistbxDrugAvailableList.Items.Count - 1 Dim drugs As String = CType(chklistbxDrugAvailableList.Items(i), String) If chkl

我有一个包含10个名称a到J的CheckedListBox(这是一个字符串,但这里我只是使用abc),我希望这样,每次用户选中某个内容时,文本都会同时显示在列表框中。我试过这个:

For i = 0 To chklistbxDrugAvailableList.Items.Count - 1
            Dim drugs As String = CType(chklistbxDrugAvailableList.Items(i), String)
            If chklistbxDrugAvailableList.GetItemChecked(i) Then
                listbxYourOrder.Items.Add(drugs)
            End If
           'drugs = nothing
Next
但当我勾选A、B、C时,列表框中的文本重复如下:

A
A
B
A
B
C
我不知道为什么会这样。我没有将
药物
声明为数组。即使我使用了
药物=nothing
,它仍然会给出重复的值


我该怎么办?如果这是一个noob问题,很抱歉。

以下是我将如何完成整个任务:

Private子CheckedListBox1\u ItemCheck(发送方作为对象,e作为ItemCheckEventArgs)处理CheckedListBox1.ItemCheck
'清除当前列表框内容。
ListBox1.Items.Clear()
'获取当前选中项目的索引。
Dim CHECKEDDICES=CheckedListBox1.CHECKEDDICES.Cast(整数的)()
'如果正在检查项目,则将当前索引添加到列表中,否则将其删除。
checkedDices=If(e.NewValue=CheckState.Checked,
选中的子项。追加(例如索引),
checkedDices.除了({e.Index}))
'按顺序获取选中的项目并将其添加到列表框。
ListBox1.Items.AddRange(checkedDices.OrderBy(函数(n)n)。
选择(功能(i)选中列表框1.项目(i))。
ToArray())
端接头
或者像这样:

Private子CheckedListBox1\u ItemCheck(发送方作为对象,e作为ItemCheckEventArgs)处理CheckedListBox1.ItemCheck
'获取当前选中项目的索引。
Dim CHECKEDDICES=CheckedListBox1.CHECKEDDICES.Cast(整数的)()
'如果正在检查项目,则将当前索引添加到列表中,否则将其删除。
checkedDices=If(e.NewValue=CheckState.Checked,
选中的子项。追加(例如索引),
checkedDices.除了({e.Index}))
'按顺序获取选中的项目并将其添加到列表框。
ListBox1.DataSource=checkedDices.OrderBy(函数(n)n)。
选择(功能(i)选中列表框1.项目(i))。
ToArray()
端接头
不同之处在于,由于第二个选项使用数据绑定,因此默认情况下将选择
列表框中的第一项

需要有点冗长的原因是在检查或取消检查项目之前引发了
ItemCheck
事件。因此,我们需要首先获取当前选中的项,然后添加或删除当前项,这取决于当前项是被选中还是未选中

编辑:

这里有一个不需要清除
列表框的选项:

Private子CheckedListBox1\u ItemCheck(发送方作为对象,e作为ItemCheckEventArgs)处理CheckedListBox1.ItemCheck
Dim项目=CheckedListBox1.项目(如索引)
如果e.NewValue=CheckState.Checked,则
ListBox1.Items.Add(项目)
其他的
ListBox1.Items.Remove(项目)
如果结束
端接头

问题是这些项目将按照您选中它们的顺序出现在
列表框中,而不是按照它们在
选中列表框中出现的顺序。其他选项使两个列表中的项目保持相同的顺序。

如果我理解您的问题,我将:

   lstbxYourOrder.Items.Clear()
   For Each l As String In chklistbxDrugAvailableList.CheckedItems
         listbxYourOrder.Items.Add(l)
   Next

只需在添加新项目之前清除列表框,即在循环之前-
listbxYourOrder.items.clear()
@preciousbetine现在列表框中没有显示任何内容。此外,我要一份所有检查项目的清单。如果每次清除列表框,只会显示1项,对吗?“列表框中没有显示任何内容”。你应该在其他代码之前清除它,而不是之后。“仅显示1项”。当您有添加所有选中项的代码时,怎么会出现这种情况?@preciousbetine谢谢,它现在可以工作了。你能回答我的问题吗?我能问一下为什么要使用clear吗?在我检查项目之前,列表框已经是空的。好吧,试试下面的答案,如果它有效的话,接受它!