让listview控件显示checkbox后,我想中进行单一选择,即只能选择一个checkbox像radiobutton一样,怎样实现?

lcmlhs_2005 2010-12-24 03:59:34
让listview控件显示checkbox后,我想中进行单一选择,即只能选择一个checkbox像radiobutton一样,怎样实现?
...全文
540 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcmlhs_2005 2010-12-27
  • 打赏
  • 举报
回复
楼上的,Delphi7没有这个方法的,你那个方法是在哪个版本里出现的?
tomorrow619810 2010-12-27
  • 打赏
  • 举报
回复
直接改 控件代码

思路:
1.截获 click 消息,
2.判断 checkbox的区域,
3.当 鼠标在 click时,如果是在checkbox的区域,直接响应你要的 动作
YLCN2010 2010-12-27
  • 打赏
  • 举报
回复

procedure OnItemChecked(Sender: TObject; Item: TListItem);
lcmlhs_2005 2010-12-27
  • 打赏
  • 举报
回复
坚持不懈地顶
CaiBirdy 2010-12-27
  • 打赏
  • 举报
回复
把Customlistview 的代码复制一份,把里面的checkbox改成radiobutton,不过我看你也不知道怎么弄,会弄也不用来问了,实际上也不需要这样,在customdraw事件自己做更简单,无非就是创建radiobutton,设置一下位置和check属性。

看你提问的态度实在不行,也不懂变通,实际上别人的代码都给了,不行就自己调一下。
11楼的代码,无非就是idx := ListView1.ItemIndex;总是等于-1,聪明的人就会改变一下
idx := ListView1.GetItemAt(X, Y).Index;
可你什么都不会,干脆别写代码了
就算你照搬代码肯定到时候会出丑,原因自己去想吧
lcmlhs_2005 2010-12-25
  • 打赏
  • 举报
回复
不行的,楼上的均不中,因为你们是写在selectitem里的,这样一来,我就必须先选择里面的item,而有时候用户是直接单击item前面的checkbox的
九死一生 2010-12-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sailxia 的回复:]
Delphi(Pascal) code

{delphi2010 例子编译通过}
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
i: Integer;
begin
for I := 0 to ListView1.Items.Co……
[/Quote]


这样可以的~~~
keeley20 2010-12-25
  • 打赏
  • 举报
回复
设置一个变量 lstItem:TListItem,用来存储checkbox:=true;

每次选中CHeckbox的时候检查lstItem是否为空,不为空则先 lstItem.checked:=false,
然后再把lstItem设为选中的。
Frank.WU 2010-12-24
  • 打赏
  • 举报
回复

{另外的方法}
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
i,idx: Integer;
begin
idx := ListView1.ItemIndex;
if idx <> -1 then
begin
for I := 0 to ListView1.Items.Count - 1 do
begin
ListView1.Items.Item[i].Checked := False;
end;
ListView1.Items.Item[idx].Checked := True;
end;
end;
Frank.WU 2010-12-24
  • 打赏
  • 举报
回复

{delphi2010 例子编译通过}
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
i: Integer;
begin
for I := 0 to ListView1.Items.Count - 1 do
begin
ListView1.Items.Item[i].Checked := False;
end;
Item.Checked := True;
end;


lcmlhs_2005 2010-12-24
  • 打赏
  • 举报
回复
难道没有高手吗?为了这个问题,我很急躁
lcmlhs_2005 2010-12-24
  • 打赏
  • 举报
回复
if Item.Checked then
Label1.Caption:=Item.SubItems.Strings[0];
for i:=0 to LV_batch.Items.Count-1 do
begin
if LV_batch.Items.Item[i]<>Item then
LV_batch.Items.Item[i].Checked:=False;
end;

上面的代码是写在change里的,问题是当我从一个被选择的item单击另一个要选择的item时,要单击选择两次,即切换下一个选择的时候不实时,没达到我的要求,大家帮看一下
ecjtu5208 2010-12-24
  • 打赏
  • 举报
回复
唉,变通啊,哥啊,可以判断有几个选中的checkbox.
如果是已经有一个,那么之前那个选中的checkbox取消选中状态,
如果没有就选中。
ecjtu5208 2010-12-24
  • 打赏
  • 举报
回复
思路:以一个变量存储checkbox选中的个数,大于1,就不让它选中。
lcmlhs_2005 2010-12-24
  • 打赏
  • 举报
回复
楼上的不中,因为,客户还可能要选择其它的呢,当它选择其它的时候,原先选择的就得自动取消
ecjtu5208 2010-12-24
  • 打赏
  • 举报
回复
这很好写的吧,不过是多写几行代码而已吧。
ecjtu5208 2010-12-24
  • 打赏
  • 举报
回复
设置一个flag,有一个checkbox被选中,flag变为lock状态。其他不能选。
lcmlhs_2005 2010-12-24
  • 打赏
  • 举报
回复
在哪儿写,怎么写?用For吗不行的啊
ecjtu5208 2010-12-24
  • 打赏
  • 举报
回复
自己写代码控制事件吧,一样的把

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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