Q&A

  • 이벤트 제어(잠시정지)
OnChange Event가 시작되는 시점에는 적용이 되지 않도록 해야 되는데 방법을 잘 모르겠네요. 어떻게 해야 Event가 적용되지 않고 그냥 넘어갈수가 있나요. 예를 들면

Trieview의 beginUpdate 와 EndUpdate 와 같이 잠시 이벤트가 적용되지 않았으면 좋겠는데 고수님들의 조언 부탁 드립니다.

1  COMMENTS
  • Profile
    최석기 2000.07.20 01:26
    skyname wrote:

    > OnChange Event가 시작되는 시점에는 적용이 되지 않도록 해야 되는데 방법을 잘 모르겠네요. 어떻게 해야 Event가 적용되지 않고 그냥 넘어갈수가 있나요. 예를 들면

    > Trieview의 beginUpdate 와 EndUpdate 와 같이 잠시 이벤트가 적용되지 않았으면 좋겠는데 고수님들의 조언 부탁 드립니다.



    이런걸 물어보시는건지 잘 모르겠지만 참고하세요..



    원래 TEdit의 OnChange에서 Text를 바꾸면 또다른 OnChange가 발생하여

    무한 루프에 빠집니다(stack이 다 소모될때까지 재귀적으로...)

    이때는 아래 소스처럼 OnChange를 nil로 하여 잠시 이벤트를

    막아놓고 Text의 값을 변경한 후 막아놓은 OnChange를 복구하면 됩니다



    procedure Edit1Change(Sender : TObject);

    begin

    Edit1.OnChange := NIL; //Change 이벤트 발생 억제.

    //원하는 루틴

    if Edit1.Text = 'Some Text' then

    Edit1.Text := 'New Text';

    //원하는 루틴

    Edit1.OnChange := Edit1Change; //Change 이벤트 재연결

    end;