2013-05-25 62 views
5

我,(更多的時間),試圖執行行動時,我點擊進入一個TreeView的項目看:執行事件僅在點擊一個TreeView節點

procedure TForm1.TreeView1Click(Sender: TObject); 
begin 

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

end; 

此代碼顯示一條消息,如果用戶點擊進入樹視圖的索引1,問題是以下內容:如果用戶選擇的索引1,將所示的消息,但是在這之後,用戶點擊進入仍然執行所述消息列表視圖的空白區域,因爲該項目仍處於選中狀態。只有當用戶點擊相應的項目時,我如何才能使事件運行?

回答

7

不要使用OnClick,只要單擊了TTreeView(不僅在單擊節點時)就會發生這種情況。相反,使用TTreeView.OnChange事件,通過你的節點:

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

此外,人們必須考慮鍵盤的。有些人只使用鍵盤,沒有鼠標。 –

+0

@AndreasRejbrand,我想使用事件「TTreeView.OnChange」。但它不會通過點擊或按鍵來觸發。你有什麼想法,爲什麼它不會觸發事件? – Ugur

+0

有人希望使用treeview的OnClick事件處理程序而不是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

這是完美的答案。謝謝.. –