关于checkedlistbox中的一点心得(原创哈~)

seabirdforever 2003-03-04 08:43:12
我在编程序的时候,遇到把多个items项移出checkedlistbox的问题,查看了msdn,该死的英文的东西,发现checkedlistbox有批量增加items项的相关方法,但却没有批量删除选中的items项的方法(或许有,哪位找到了告诉我哈~),以下是我想的解决办法
Button2为点击确定批量删除选中的items项的按钮,checkedlistbox1为checkedlistbox的name
程序分析如下:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'CheckedNum为选中的items项的个数
Dim CheckedNum As Integer
' 选中的数量 CheckedListBox1.CheckedItems.Count
CheckedNum = CheckedListBox1.CheckedItems.Count
'如果没有选中项就不跳出sub Button2_Click()
If CheckedNum = 0 Then Exit Sub
'i,j为循环变量
Dim i, j As Integer
j = 0
' arr() 数组用来保存 选中的项 的 index
Dim arr(CheckedNum) As Integer
For i = 0 To (CheckedListBox1.Items.Count - 1)
'CheckedListBox1.GetItemChecked(i)检测 index为i的itmes项是否
'为选中状态
'如果为选中状态,则arr(j)记录 其 index
If CheckedListBox1.GetItemChecked(i) = True Then
arr(j) = i
j += 1
End If
Next
'一个个删除 选中的项
'因为每执行一次CheckedListBox1.Items.RemoveAt(index)后
'整个itmes的index都要变化,例如选中A(index为2),
'B(index为5),C(index为7),D(index为20),个为值为,第
'则删除A即CheckedListBox1.Items.RemoveAt(2)后
'index变化为'B(index为4),C(index为6),D(index为19)
'再删除B,就要即CheckedListBox1.Items.RemoveAt(4),是4而不是5
'以此类推,所以下面要写成
'CheckedListBox1.Items.RemoveAt((arr(i) - i))
For i = 0 To CheckedNum - 1
CheckedListBox1.Items.RemoveAt((arr(i) - i))
Next

End Sub

'Button4为点击后反选中的按钮

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'CheckedListBox1.Items.Count 为items的个数
Dim ItemsCount As Integer = CheckedListBox1.Items.Count
Dim i
For i = 0 To ItemsCount - 1
'CheckedListBox1.SetItemChecked(i,True|false)
'用来设定index为i是否为选中,true选中,false不选中
'Not CheckedListBox1.GetItemChecked(i)得到反选状态为
'还是ture|false
CheckedListBox1.SetItemChecked(i, (Not CheckedListBox1.GetItemChecked(i)))
Next
End Sub
'Button5为点击后全选中的按钮
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim ItemsCount As Integer = CheckedListBox1.Items.Count
Dim i
For i = 0 To ItemsCount - 1
CheckedListBox1.SetItemChecked(i, True)
Next
End Sub
'Button4为点击后全部取消选中的按钮
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim ItemsCount As Integer = CheckedListBox1.Items.Count
Dim i
For i = 0 To ItemsCount - 1
CheckedListBox1.SetItemChecked(i, False)
Next
End Sub
对于button1的删除操作我们也可以用button7来完成
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
'ItemsNum为所有items项的个数
'NewItemsNum为每次删除后items项的个数
Dim ItemsNum, NewItemsNum As Integer
ItemsNum = CheckedListBox1.Items.Count
NewItemsNum = ItemsNum
'i为循环变量
Dim i As Integer
For i = 0 To (ItemsNum - 1)
If CheckedListBox1.GetItemChecked(i) = True Then
CheckedListBox1.Items.RemoveAt(i)
'假设删除 index为2,那么删除前index为 3的项其index就变为2
'所以下次还是 从index 为 2开始检查 是否为选中状态
'所以 i-=1 , 同时 itmes的总个数也减少一个
i -= 1
NewItemsNum -= 1
End If
'因为每次删除一项后 itmes的总项就会变减少1
'所以i 不可能循环到 ItemsNum - 1,
'CheckedListBox1.GetItemChecked(i)会出错
'所以我们判定中止条件是i 等于 删除后 的items个数 NewItemsNum-1
If i = NewItemsNum - 1 Then Exit For
Next

End Sub
以上是我的一点心得阿,不过总在想checkedlistbox应该有批量删除操作方法,如果有当然就不要我这么麻烦了。以上在vs.net企业版+win2000P下调试
自我介绍:
本人擅长sqlserver2000+asp,曾设计过大型商业系统
会vb,c,c++,正努力学习vb.net
email:67732074@sina.com欢迎大家交流。
...全文
415 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sumtec 2003-03-07
  • 打赏
  • 举报
回复
Dim i, Index As Integer
With CheckedListBox1
For i = .CheckedIndices.Count - 1 To 0 Step -1
Index = .CheckedIndices(i)
If .GetItemChecked(Index) Then .Items.RemoveAt(Index)
Next
End With
jaffler 2003-03-05
  • 打赏
  • 举报
回复
:)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧