【问题标题】:Execute event only if a treeview node is clicked仅在单击树视图节点时执行事件
【发布时间】:2013-05-25 22:42:53
【问题描述】:

我,(更多时间),当我单击树视图的项目时尝试执行操作,请参阅:

procedure TForm1.TreeView1Click(Sender: TObject);
begin

  if treeview1.Selected.AbsoluteIndex=1 then
  begin
    showmessage('selecionado');
  end; 

end;

如果用户点击树视图的索引 1,此代码会显示一条消息,问题如下:如果用户选择索引 1,则会显示消息,但之后,用户点击进入树形视图的空白区域listview 消息仍在执行,因为该项目仍处于选中状态。只有当用户单击相应的项目时,如何才能使事件运行?

【问题讨论】:

    标签: delphi treeview


    【解决方案1】:

    不要使用OnClick,只要单击TTreeView 就会出现这种情况(不仅是单击节点时)。相反,请使用 TTreeView.OnChange 事件,它会将节点传递给您:

    procedure TForm3.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
      if Assigned(Node) then
        if Node.AbsoluteIndex = 1 then
          ShowMessage('selecionado');
    end;
    

    【讨论】:

    • 另外,还得想想键盘。有些人只用键盘,不用鼠标。
    • @AndreasRejbrand,我想使用事件“TTreeView.OnChange”。但它不会通过点击或按键触发。你有什么想法,为什么它不触发事件?
    • 如果有人想使用树视图的 OnClick 事件处理程序而不是 OnChange 的任何解决方案?
    • @tdiop:阅读我的回答的第一句话,它回答了您评论中的问题。如果要处理 TreeView 上任意位置的单击,请使用 OnClick。如果您想处理单个节点上的点击(而不是没有节点的区域),请使用OnChange。我的回答中已经很清楚地解释了这一点。
    • OnChange 只触发一次,但如果我想处理对同一项目的连续点击怎么办?
    【解决方案2】:
    procedure TfClerks.tvHqClick(Sender: TObject);
    var
      Node: TTreeNode;
    begin
      with tvHq.ScreenToClient(Mouse.CursorPos) do
        Node := tvHq.GetNodeAt(X, Y);
      if Node = nil then
        Exit;
      // do something
    end;
    

    【讨论】:

      【解决方案3】:
      procedure TForm1.TreeView1Click(Sender: TObject);
      begin
          if Assigned(TreeView1.Selected) then
          begin
              if SameText(TreeView1.Selected.Text, 'show form1') then
                  ShowMessage('selecionado')
              else
                 if SameText(TreeView1.Selected.Text, 'show form2') then
                     ShowMessage('s22');
          end
      end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多