如何在ListView中点选前面的CheckBox后,后面的整行高亮 |
答題得分者是:pgdennis
|
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
大大们好,小弟有问题向您们请教: 想要实现的功能是:
当点选ListView前面的CheckBox后,后面的整行都同样的出现高亮.
在窗体上放置一个ListView1和Edit1
ListView1.ViewStyle := vsReport;
ListView1.Checkboxes := True;
ListView1.RowSelecte := True;
ListView1.Columns[0].Caption := "测试1";
ListView1.Columns[1].Caption := "测试2";
然后在Items中设置新的Item,分别为: 1,2,3,4;
接着编译,把焦点切换到Edit1中,用鼠标点击ListView1中Item前面的Checkbox(就是1,2,3,4前面的Checkbox),希望后面的整行能产生高亮状态.就是当用鼠标只点击Chekcbox,而不是点Item时,后面的整行都能产生高亮状态. 我搜索过站内的相关内容,仍然不得其解,请大大们原谅小弟的无知 人生在勤,不索何获?
------
人生在勤,不索何获? |
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
試試看,當點選checkbox時,這行會變紅色
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin if item.Checked then Sender.Canvas.Brush.Color := clRed; end;永遠追不上技術更新的速度~~
------
星期一,二...無窮迴圈@@ |
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
谢谢pgdennis大大的提示,您的方法让我醍醐灌顶.我又偷学到一招< > 不好意思,是我没有把问题描述清楚,抱歉了< >.我希望实现的效果是:当用鼠标点击Checkbox时,产生和用鼠标点击Item时一样的效果,就是焦点被切换到该行上,使得整行都变成高亮的状态.就像CheckListBox一样,点击了前面的CheckBox后,焦点也会随着切换到后面,从而产生高亮状态.
在ListView中把焦点切换出去后,就不会有高亮了,不晓得可不可以实现CheckListBox那样,即使焦点切换出去了,也能高亮呢? 再请问一点:怎样检测到点击的是前面的Checkbox呢?我知道如果是点击Item,可以使用ListView::OnSelectItem()来单独检查到从而对其处理.而使用ListView::OnChange()是不管鼠标,键盘的动作都通通被检查到.有没有专门由点击Checkbox产生的消息,是不是需要自己去拦截该消息呢? 人生在勤,不索何获?
------
人生在勤,不索何获? |
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
引言: 谢谢pgdennis大大的提示,您的方法让我醍醐灌顶.我又偷学到一招< > 不好意思,是我没有把问题描述清楚,抱歉了< >.我希望实现的效果是:当用鼠标点击Checkbox时,产生和用鼠标点击Item时一样的效果,就是焦点被切换到该行上,使得整行都变成高亮的状态.就像CheckListBox一样,点击了前面的CheckBox后,焦点也会随着切换到后面,从而产生高亮状态. 在ListView中把焦点切换出去后,就不会有高亮了,不晓得可不可以实现CheckListBox那样,即使焦点切换出去了,也能高亮呢? 再请问一点:怎样检测到点击的是前面的Checkbox呢?我知道如果是点击Item,可以使用ListView::OnSelectItem()来单独检查到从而对其处理.而使用ListView::OnChange()是不管鼠标,键盘的动作都通通被检查到.有没有专门由点击Checkbox产生的消息,是不是需要自己去拦截该消息呢? 人生在勤,不索何获?1. rowselect=true; 2.再次修正過了..應該就是你要的 procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var H:Tlistitem; begin H:=listview1.GetItemAt(X,Y); if H.Checked then H.Selected:=true; end;永遠追不上技術更新的速度 發表人 - pgdennis 於 2003/07/16 16:53:32 發表人 - pgdennis 於 2003/07/16 16:55:11
------
星期一,二...無窮迴圈@@ |
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |