2014-12-16 2 views
0

나는 그 OnChange 이벤트를 사용하여 ComboBox에 선택한 항목을 추가하는 Delphi에서 TreeView를 사용하고 있습니다.TreeView의 OnChange 및 OnClick 이벤트를 모두 발생시키지 만

그러나 큰 문제는 OnChange 이벤트가 TreeView에서 선택한 항목을 클릭하면 작동하지 않는다는 것입니다. 선택되지 않은 항목을 클릭 할 때만 작동합니다.

이 문제를 해결하기 위해 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"); 
}); 
+0

설명하는 방식대로 실제로 코드를 게시하십시오. 'Test'가 두 번 호출되었지만'ShowMessage ('submit')'을 추가 한 이후 더 이상 그렇지 않다는 것이 사실입니다. TreeView (defocuses)를 종료하기 때문입니다. – NGLN

답변

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;