我使用 VirtualStringTree 控件作为列表视图并使用排序功能。但是,当我双击 VirtualStringTree 标题时,排序方向符号会隐藏,直到我再次单击标题。
可以禁用该行为吗?
我尝试过但不起作用的事情:
- 我已搜索属性,但找不到相关设置
- 我已将双击标题事件链接到单击标题事件
我的环境是Delphi 2007 Pro,Windows 7 Pro 64bit。
我使用 VirtualStringTree 控件作为列表视图并使用排序功能。但是,当我双击 VirtualStringTree 标题时,排序方向符号会隐藏,直到我再次单击标题。
可以禁用该行为吗?
我尝试过但不起作用的事情:
我的环境是Delphi 2007 Pro,Windows 7 Pro 64bit。
我在双击和隐藏排序三角形时遇到了同样的问题,而我只想要一个简单的向上/向下切换,没有别的。不幸的是,最新的 VirtualTreeView (4.8.7) 中也存在此问题。
这里有一些代码可以解决这个问题——在你的OnHeaderClick
活动中加入这样的东西(不是OnHeaderDblClick
!)。
相关行是if HitInfo.Column = NoColumn then Exit;
修复双击问题的。您可能会也可能不会将其余代码用于您自己的目的,但它可能对其他人有用。其余的解释在代码注释中。
您不需要定义 OnHeaderDblClick 事件 - 如果不需要,它可能为空,因此您可能希望将其从代码中删除。
更新
还可以阅读 TLama 的评论,因为版本 5.0.0 似乎如此。此修复程序可能无法按预期运行。使用当前版本,它确实如此。
{**
A column header of a VirtualStringTree was clicked: Toggle the sort direction
}
procedure TMainForm.vstHeaderClick(Sender: TVTHeader; HitInfo: TVTHeaderHitInfo);
begin
// Don't call sorting procedure on right click
// Some list-headers have a contextmenu which should popup then.
if HitInfo.Button = mbRight then Exit;
// Beginning with VT's r181, this proc is also called when doubleclicking-to-autofit
// Seems buggy in VT as this suddenly calls it with Column=-1 in those cases.
// See also issue #1150
if HitInfo.Column = NoColumn then Exit;
if Sender.SortColumn <> HitInfo.Column then Sender.SortColumn := HitInfo.Column
else if Sender.SortDirection = sdAscending then Sender.SortDirection := sdDescending
else Sender.SortDirection := sdAscending;
Sender.Treeview.SortTree( HitInfo.Column, Sender.SortDirection );
end;