我使用VirtualStringTree控件作为列表视图并使用排序功能。但是,当我双击VirtualStringTree标题时,排序方向符号会隐藏,直到我再次单击标题。
可以禁用该行为吗?
我尝试但不起作用的事情:
我的环境是Delphi 2007 Pro,Windows 7 Pro 64位。
答案 0 :(得分:1)
我在双击和隐藏排序三角形方面遇到了同样的问题,而我只是想要一个简单的向上/向下切换而没有别的。不幸的是,在最新的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;