2013-05-25 15 views
5

I, (jeszcze raz), starając się wykonać akcję po kliknięciu na pozycji z katalogów patrz:Execute zdarzenie tylko wtedy, gdy węzeł katalogów kliknięciu

procedure TForm1.TreeView1Click(Sender: TObject); 
begin 

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

end; 

Ten kod wyświetla komunikat jeśli użytkownik kliknij na indeks 1 widoku drzewa, Problem jest następujący: Jeśli użytkownik wybierze indeks 1, zostanie wyświetlony komunikat, ale po tym użytkownik kliknie w pustym obszarze listy, wiadomość nadal jest wykonywana, ponieważ element jest wciąż zaznaczony . Jak mogę uruchomić wydarzenie tylko wtedy, gdy użytkownik kliknie odpowiedni element?

Odpowiedz

7

Nie używaj OnClick, który pojawia się po kliknięciu przycisku TTreeView (nie tylko po kliknięciu węzła). Zamiast użyć zdarzenia TTreeView.OnChange, który przechodzi Ci węzła:

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

Ponadto, trzeba myśleć o klawiaturze. Niektórzy używają tylko klawiatury i myszy. –

+0

@AndreasRejbrand, chciałem użyć zdarzenia "TTreeView.OnChange". Ale nie uruchamia się za pomocą kliknięcia lub naciśnięcia klawiszy. Czy masz jakiś pomysł, dlaczego nie uruchamia tego wydarzenia? – Ugur

+0

Jakieś rozwiązanie na wypadek, gdyby ktoś chciał użyć programu obsługi zdarzeń OnClick zamiast widoku OnChange? – grinner

0
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; 
1
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; 
+0

To idealna odpowiedź. Dzięki.. –

Powiązane problemy