Delphi:在树视图中取消选择选定的项目 [英] Delphi: unselect selected items in Tree View

查看:253
本文介绍了Delphi:在树视图中取消选择选定的项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有一个树形视图,MultiSelect:=true.

如果要选择所有项目,则无法取消选择或再次选择,而不能选择其他项目.我想我需要在TForm1.TreeView1Click上执行TreeView1.Selected.Selected:=false;.但是如何知道是否没有单击控件:项目,按钮?

If to select all items then it is impossible to unselect or to select again but others. I think I need to do TreeView1.Selected.Selected:=false; on TForm1.TreeView1Click. But how to know if a click was not on controls: items, buttons?

视频: http://liga-installer.realservers.info/select.mp4

代码是否低于正常水平?

Is a code below normal?

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键单击的方式一次取消选择一个项目.

You are supposed to hold down the Shift key while clicking the first selected item. You can also deselect one item at a time by Ctrl-clicking it.

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

But I agree it is counter-intuitive. I'd do

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;

这篇关于Delphi:在树视图中取消选择选定的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆