触发TreeView的OnChange和OnClick事件,但不是两者

时间:2014-12-16 12:46:11

标签: delphi delphi-xe6

我在Delphi中使用TreeView,我使用它的OnChange事件将所选项添加到ComboBox。

但最大的问题是,当您单击TreeView中的选定项时,OnChange事件不起作用。它仅在我单击未选中的项目时有效。

要解决此问题,我还会使用OnClick事件。但后来问题变成了两个事件都被解雇了一个未选择的项目:

procedure Test;
begin
  ShowMessage('submit');
end;

procedure TForm1.TreeView1Click(Sender: TObject);
begin
  Test;
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  Test;
end;

它运行ShowMessage两次。如何检查是否存在先前的事件,或者当前是否正在运行事件?

与jQuery类似的东西:

$ ("#foo") .bind ("Change click", function () {
   $ (This) .toggleClass ("entered");
});

1 个答案:

答案 0 :(得分:0)

也许是一种太明显的解决方案,但你是否尝试过......只使用OnClick事件?


但要回答你的问题,如何防止第二个事件被解雇:

典型的解决方案是将先前选择的索引存储在变量中,并检查该变量:

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  Test;
end;

procedure TForm1.TreeView1Click(Sender: TObject);
begin
  if TreeView1.Selected.Index = FPrevTreeViewIndex then
    Test;
  FPrevTreeViewIndex := TreeView1.Selected.Index;
end;