【问题标题】:How to select nothing by clicking the empty background?如何通过单击空白背景不选择任何内容?
【发布时间】:2019-03-22 13:34:15
【问题描述】:

我有一个虚拟树视图(例如TVirtualStringTree)。

  • 用户可以选择一行
  • 但如果他们也能直观地点击 “nowhere” 以选择无行,那就太好了

注意:当然多选是关闭的;因为他们只能选择零个或一个项目

MCRE:

procedure TForm6.FormCreate(Sender: TObject);
var
    vst: TVirtualStringTree;
begin
    vst := VirtualStringTree1;

    vst.RootNodeCount := 5;
    vst.TreeOptions.SelectionOptions := vst.TreeOptions.SelectionOptions + [toFullRowSelect];
    vst.Header.Options := vst.Header.Options + [hoVisible];
    vst.Header.Columns.Add;
    vst.Header.Columns.Add;
    vst.Header.Columns.Add;
    vst.Header.Columns.Add;
    vst.Header.Columns.Add;
end;

【问题讨论】:

  • 我在 VST 上努力想出同样的事情。

标签: delphi virtualtreeview


【解决方案1】:

如果未设置 toAlwaysSelectNode 并且在 TreeOption.SelectionOptions 中设置了 toMultiSelect,这应该可以开箱即用。经最新来源测试。

在其他情况下,只需拨打ClearSelection():

procedure TVisibilityForm.VST2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if TBaseVirtualTree(Sender).GetNodeAt(Point(X, Y)) = nil then
    TBaseVirtualTree(Sender).ClearSelection();
end;

【讨论】:

  • 它对toRightClickSelect 造成严重破坏。这是可能导致永远追踪边缘情况的黑客之一。另外,我假设您的意思是 "toMultiSelect 未在 TreeOptions.SelectionOptions" 中设置(因为使用 toMultiSelect 意味着您不必做任何特别的事情 - 点击空背景已取消选择)
  • “因为使用 toMultiSelect 意味着您不必做任何特别的事情” 这就是我的意思,它开箱即用。
  • 是的,右键单击选择行为似乎是每个 TreeView 控件的关键点。请随时在 GitHub 上的问题中提交更多详细信息。
【解决方案2】:

OnMouseDown中的这个过程不管设置如何都应该可以工作,你只需要TreeOptions.SelectionsOptions中的toRightClickSelect右键选择,否则不能正常工作。

procedure VSTMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button in [mbLeft, mbRight] then
    VST.FocusedNode := VST.GetNodeAt(X, Y);

  if Assigned(VST.FocusedNode) then
    VST.TreeOptions.PaintOptions := VST.TreeOptions.PaintOptions - [toAlwaysHideSelection]
  else
    VST.TreeOptions.PaintOptions := VST.TreeOptions.PaintOptions + [toAlwaysHideSelection];
end;

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 2018-09-19
    • 2018-11-27
    • 2012-02-19
    • 2012-02-07
    • 2014-06-13
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多