2013-05-25 12 views
5

I、(より多くの時間)、私はツリービューの項目にクリックしたときに参照アクションを実行しようとしている:ユーザーにクリックした場合は、ツリービューのノードがクリックされた場合にのみ、イベントを実行し

procedure TForm1.TreeView1Click(Sender: TObject); 
begin 

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

end; 

このコードは、メッセージを表示しますユーザがインデックス1を選択すると、メッセージが表示されますが、その後、ユーザがリストビューの空の領域をクリックすると、メッセージはまだアイテムが選択されているので実行されます。ユーザーが対応するアイテムをクリックした場合にのみイベントを実行させるにはどうすればよいですか?

答えて

7

TTreeViewがクリックされたとき(ノードがクリックされたときだけでなく)に発生するOnClickを使用しないでください。

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

また、1はキーボードを考えています代わりに、あなたのノードを渡しTTreeView.OnChangeイベントを、使用しています。一部の人はキーボードだけを使用し、マウスは使用しません。 –

+0

@AndreasRejbrand、私はイベント "TTreeView.OnChange"を使いたいと思っていました。しかし、それはクリックやキーの押下では起きません。それはなぜイベントを発射しないのですか? – Ugur

+0

誰かがOnChangeの代わりにTreeViewのOnClickイベントハンドラを使用したい場合のためのソリューション? – 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

それは完璧な答えです。ありがとう.. –

関連する問題