Delphi:在树状视图中取消选择所选项目

Delphi:在树状视图中取消选择所选项目,delphi,select,treeview,Delphi,Select,Treeview,有一个树状视图,MultiSelect:=true 如果选择所有项目,则无法取消选择或再次选择其他项目。我想我需要做TreeView1.Selected.Selected:=false在t上单击m1.treeview1。但是,如何知道是否单击了控件:项目、按钮 视频: 代码是否低于正常值 procedure TForm1.TreeView1Click(Sender: TObject); var Item: TTreeNode; begin Item :=TTreeView(Sender)

有一个树状视图,
MultiSelect:=true

如果选择所有项目,则无法取消选择或再次选择其他项目。我想我需要做
TreeView1.Selected.Selected:=false
t上单击m1.treeview1。但是,如何知道是否单击了控件:项目、按钮

视频:

代码是否低于正常值

procedure TForm1.TreeView1Click(Sender: TObject);
var
Item: TTreeNode;
 begin

  Item :=TTreeView(Sender).GetNodeAt(TTreeView(Sender).ScreenToClient(Mouse.CursorPos).X,
  TTreeView(Sender).ScreenToClient(Mouse.CursorPos).y);

  if (not Assigned(Item)) and (TTreeView(Sender).SelectionCount>0) then TTreeView(Sender).Select(nil, []);
 end;

谢谢

您应该在单击第一个选定项目时按住Shift键。也可以通过按住Ctrl键并单击一个项目,一次取消选择一个项目

但我同意这是违反直觉的。我愿意

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i: Integer;
begin
  if not Assigned(TreeView1.GetNodeAt(X, Y)) then
    for i := 0 to TreeView1.Items.Count - 1 do
      TreeView1.Items[i].Selected := false;
end;

我可以播放视频。我创建了一个新项目,选择了所有项目,但无法取消选择。请参见:如何通过单击一次取消选择所有项目?再次按住键并单击很不方便。“我想我需要执行TreeView1.Selected.Selected:=false;在TForm1.TreeView1上单击。但是如何知道是否单击了控件:项目、按钮?”@maxfax:使用
GetNodeAt
GetHittestInfo
函数。取消选择所有
TreeView1.Select(nil,[])这种行为似乎是设计出来的,自从我第一次使用Delphi树视图以来就一直存在。这是一个非常反直觉的设计。在我的应用程序中,我破解了VCL,使控件表现得更好。