2

我使用 VirtualStringTree 控件作为列表视图并使用排序功能。但是,当我双击 VirtualStringTree 标题时,排序方向符号会隐藏,直到我再次单击标题。

可以禁用该行为吗?

我尝试过但不起作用的事情:

  • 我已搜索属性,但找不到相关设置
  • 我已将双击标题事件链接到单击标题事件

我的环境是Delphi 2007 Pro,Windows 7 Pro 64bit。

4

1 回答 1

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;
于 2011-11-30T22:05:08.857 回答