Выполнить событие только при щелчке узла 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;