Выполнить событие только при щелчке узла treeview

I, (больше времени), пытаясь выполнить действие, когда я нажимаю на элемент treeview см.:

procedure TForm1.TreeView1Click(Sender: TObject);
begin

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

end;

этот код показывает сообщение если пользователь нажимает на индекс 1 treeview, проблема заключается в следующем: если пользователь выбирает индекс 1, сообщение будет показано, однако после этого пользователь нажимает в пустую область listview сообщение все еще выполняется, потому что элемент все еще выбран. Как я могу запустить событие, только если пользователь щелкнет соответствующий предмет?

3 ответов


не используйте OnClick, который происходит всякий раз, когда TTreeView щелкается (не только при щелчке узла). Вместо этого, используйте TTreeView.OnChange событие, которое проходит в узле:

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

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;

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;