让listview控件显示checkbox后,我想中进行单一选择,即只能选择一个checkbox像radiobutton一样,怎样实现?
解决方案 »
- indy如何判断连接断开
- 将查询结果添加到数据库中
- 我想直接在设计程序时定制ComboBox的下拉窗口,而不是重新设计一个组件,该怎么做
- [转贴]很现实,也感人。MM与IT GG的对话!
- 如何实现在ComboBox的下拉列表中显示TreeView树结构(或者与TreeView类似的数结构)?
- 怎样把记录添加到一个文件
- 使用ADOQuery,我往数据库存数据,但不让数据库存相同(二个字段都相同)记录,为什么结果不是我想的??
- inherited关键字在object pascal语法中有什么作用?
- 如何处理三层结构中服务端死机或掉线的连接问题?
- 请问director 软件那里有下载? 老板要做演示盘!!!求救!!!
- C++语言转为DELPHI语言 大家帮下忙.在线等
- FillRect(Canvas.Handle, LTextRect, Clblue);为什么 无效?大侠指点下
如果是已经有一个,那么之前那个选中的checkbox取消选中状态,
如果没有就选中。
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时,要单击选择两次,即切换下一个选择的时候不实时,没达到我的要求,大家帮看一下
{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;
{另外的方法}
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;
然后再把lstItem设为选中的。
procedure OnItemChecked(Sender: TObject; Item: TListItem);
11楼的代码,无非就是idx := ListView1.ItemIndex;总是等于-1,聪明的人就会改变一下
idx := ListView1.GetItemAt(X, Y).Index;
可你什么都不会,干脆别写代码了
就算你照搬代码肯定到时候会出丑,原因自己去想吧
1.截获 click 消息,
2.判断 checkbox的区域,
3.当 鼠标在 click时,如果是在checkbox的区域,直接响应你要的 动作