Q&A

  • showmodal 로 띠운 폼에서 디비그리드를 클릭시 이상한 현상
윈2000(sp2)와 델파이5를 사용하고 있습니다.(업뎃 패치 했음)
이문제는 어제 질문을 올렸는데 오늘 원인을 밣혀 내어 다시 적어 봅니다.
이중철님 채승호님 답변에 감사드리구요.
역시 free와는 다른 문제 였더군요(어떻게 보면 관계가 조금 있을지도..)

일단 증상부터 다시 밣히 겠습니다.

**등장폼
     form1 : 메인폼
     form2 : 모달폼(showmodal로 나타날 폼)
     dbgrid1 : form1의 디비 그리드
     dbgrid2 : form2의 디비 그리드

**발단
procedure Tform1.buttonClick(sender : Tobject);
var
   form2 : Tform2;
begin
   form2 := Tform2.Create(Self);
   form2.shomodal;
   if modalResult = mrOk then
       xxxxxxxxxxx;
   form2.free;
end;
참고 : 위의 소스는 전혀 문제 없는 소스입니다.

**전개
위의 소스처럼 폼을 띠웁니다.
공교롭게도

dbgrid1와 dbgrid2의 셀의 위치가 딱 맞아 떨어 집니다.

dbGird2의 그리드를 더블 클릭 합니다.
아래의 폼의 dbGrid1도 같이 클릭이 되어 버립니다.
그래서 원하지도 않은 dbGrid1의  OnCellClick 가 발생하여 버립니다.

즉 showmodal 로 띠운 폼에서 디비그리드를 클릭 하면
아래의 메인폼의 디비드리드 또한 클릭이 되어 버린다는 말입니다.
(바로 아래(매인폼의 디비그리드) 위치한 디비그리드가 클릭 되어 버려짐..)

물론 모달폼의 위치를 옮겨 버리면
(바로 아래의 디비그리드와 모달의 디비그리드가 겹쳐지지 않게 ...)
이상이 없죠..

왜 이런것일까요..

이 이유 알아 내는것도 오늘 소스 다시 코딩 하면서(ㅠㅠ)
우연히 알아낸 사실입니다.(백업 해놓아서 다행이지..ㅡㅡ)

다른님들도 그런 경우 겪으신 분 없으시나요..
저만 그런것 같지는 않는데..
다른 컴에 제 소스를 다시 깔아 보니깐.. 역시 위와 같은 현상이 일어 나더군요.

아 그리고 저번에 말했듯이
모달폼.free 하면 위와 같은 현상
free를 하지 않으면 위와 같은 현상은 일어 나지 않습니다.

참 알수 없는 현상이죠.

이 현상을 좀 해석 좀 해주세요..
해결법이랑..


2  COMMENTS
  • Profile
    성더기 2002.01.18 23:38
    죽읽어보니깐..
    form1과 form2는 같은 프로젝트에 있는 폼인거 같은데여

    button1click안에
    var
       form2 : Tform2;
    라구 선언해 뒀던데 왜 일케 하셨지염?
    선언안하구 걍
      form2 := TForm2.create(self)하는거 하구 차이가 있나요?

    이게 문제가 있는거 아닌가요?
  • Profile
    강성호 2002.01.19 01:13
    님이 말하시는것은
    form2라는 전역변수를 바로 이용하는것이고요...
    전 다시 선언 해서 사용하는것이고..
    별반 차이가 없을듯 한데요..

    물론 선언 하나 안하나 결과는 똑같습니다.

    그래서 지금 걍 free 이놈을 원폼(form1)close 할때
    구현 해놓고..
    폼을 불러 올때..
    if form2 = nil then
    begin
       form2 = Tform2.Create(self);
       form2.showmodal;
    end
    else
    begin
       form2.showmodal;
    end;

    라는 식으로 사용 하고 있습니다.
    원폼이 떠 있는한 free를 하지 않고 계속 나두었다가..
    원폼이 없어지는 순간..
    free 시켜 버리는거죠..

    뭐 이렇게 라도 써야죠.. ㅠㅠ