Vb.net 如何在不重复之前的文本的情况下,将项目文本从CheckedListBox获取到ListBox?图书管理系统
我有一个包含10个名称a到J的CheckedListBox(这是一个字符串,但这里我只是使用abc),我希望这样,每次用户选中某个内容时,文本都会同时显示在列表框中。我试过这个: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
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吗?在我检查项目之前,列表框已经是空的。好吧,试试下面的答案,如果它有效的话,接受它!