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,使控件表现得更好。