listview - 更改 TListView 中的选择后如何重置选择标记?
问题描述
我有一个TListView
虚拟模式,当我拖放一个项目时,我想将选择移动到新的项目位置。我这样做是清除选择,然后设置所需项目的 Selected。没关系,但是有问题。发生这种情况后,如果我按住 shift 并单击一个项目(如多选),列表的行为就像选择的开始是之前选择的项目,而不是我选择的项目(使用 Selected:= True)。
我试图模拟一次点击,但在我移动鼠标后,我遇到了访问冲突:
procedure TForm1.ListDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
List.Perform(WM_LBUTTONDOWN, MK_LBUTTON, $002E001E);
Sleep(10);
List.Perform(WM_LBUTTONUP, 0, $002E001E);
end;
解决方案
选择新项目后,您也应该将其设置为焦点。但是,更重要的是,您需要向 ListView 发送LVM_SETSELECTIONMARK
消息:
选择标记是多选开始的项目索引。
例如:
procedure TForm1.ListDragDrop(Sender, Source: TObject; X, Y: Integer);
var
Item: TListItem;
begin
...
Item := ...; // the list item after it has been moved to its new position...
Item.Selected := True;
Item.Focused := True;
List.Perform(LVM_SETSELECTIONMARK, 0, Item.Index);
List.Invalidate;
...
end;
推荐阅读
- flutter - 用计时器从画布上绘制一个矩形
- bash - 将从 bash 命令返回的路径名分配给 AppleScript 列表
- raspberry-pi - Pocketsphinx 输入溢出,读取调用太少见
- java - vert.x WebClient 握手失败,主机使用letsEncrypt证书
- postgresql - 将 PostgreSQL SQL 查询结果写入 CSV 格式的 Shell 脚本
- sql-server - 如何使用 BCP 备份 SQL Server 中的特定表
- charts - Highcharts - 使用 addPoint 添加一个点会延长时间
- r - R中的R-CNN用于分析航拍照片
- ios - Admob 未显示任何广告
- java - 如何验证模拟方法是否引发了异常?