vb如何判断listview中哪些行的复选框checkbox被选中?
比如listview从数据库中读取了很多行数据,我手动将有些行的复选框选中,我需要的结果是:通过listview的chick事件将所有选中行的第一列的数据添加到list1...
比如listview从数据库中读取了很多行数据,我手动将有些行的复选框选中,我需要的结果是:
通过listview的chick事件将所有选中行的第一列的数据添加到list1;将所有没有选中行的第一列的数据添加到list2.
注意list1和list2中的内容不能有重复!
请大家帮帮我,谢谢! 展开
通过listview的chick事件将所有选中行的第一列的数据添加到list1;将所有没有选中行的第一列的数据添加到list2.
注意list1和list2中的内容不能有重复!
请大家帮帮我,谢谢! 展开
3个回答
展开全部
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var iLoop , iLeft ,iHeight:integer;
begin
{1\ 设置ListView1当前选中的一行数据的颜色,
ListView1失去焦点颜色也存在 }
try
if ListView1.SelCount > 0 then
if Item.Index = ListView1.Selected.Index then
begin
ListView1.Canvas.brush.Color :=$00D4D4D4;
{2\ 显示CheckBox }
iLeft := 0 ;
for iLoop := 0 to 8 do iLeft := iLeft +ListView1.Columns[iLoop].width ;
if (ListView1.Items.Count > 1) then
begin
iHeight := CheckBox1.Height ;
if Item.Index > 0 then
iHeight :=ListView1.Items[Item.Index].top - ListView1.Items[Item.Index-1].top;
CheckBox1.SetBounds (
iLeft + ListView1.Left + 1,
ListView1.Items[Item.Index].top + ListView1.Top + 1,
ListView1.Columns[9].width,
iHeight);
end ;
end;
except
end;
end;
或者简单点的:
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Checked = True Then
MsgBox "第" & i & "行被选中", , "提示"
End If
Next
End Sub
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var iLoop , iLeft ,iHeight:integer;
begin
{1\ 设置ListView1当前选中的一行数据的颜色,
ListView1失去焦点颜色也存在 }
try
if ListView1.SelCount > 0 then
if Item.Index = ListView1.Selected.Index then
begin
ListView1.Canvas.brush.Color :=$00D4D4D4;
{2\ 显示CheckBox }
iLeft := 0 ;
for iLoop := 0 to 8 do iLeft := iLeft +ListView1.Columns[iLoop].width ;
if (ListView1.Items.Count > 1) then
begin
iHeight := CheckBox1.Height ;
if Item.Index > 0 then
iHeight :=ListView1.Items[Item.Index].top - ListView1.Items[Item.Index-1].top;
CheckBox1.SetBounds (
iLeft + ListView1.Left + 1,
ListView1.Items[Item.Index].top + ListView1.Top + 1,
ListView1.Columns[9].width,
iHeight);
end ;
end;
except
end;
end;
或者简单点的:
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Checked = True Then
MsgBox "第" & i & "行被选中", , "提示"
End If
Next
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最简单的方法就是遍历listView来判断是否Checked,反序列化就是排序啊,按CheckedItems下标大到小重排就是了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
List1.Clear: List2.Clear
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems.Item(i).Checked = True Then
List1.AddItem ListView1.ListItems.Item(i).SubItems(1)
Else
List2.AddItem ListView1.ListItems.Item(i).SubItems(1)
End If
Next
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems.Item(i).Checked = True Then
List1.AddItem ListView1.ListItems.Item(i).SubItems(1)
Else
List2.AddItem ListView1.ListItems.Item(i).SubItems(1)
End If
Next
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询