Q&A

  • 이미 생성된(활성화) 폼 찾기
MDI폼에서 여러개의 폼을 연 후 특정한(열린폼)을 찾아서 띄워 줄려고 하는데...



혹시 함수나 아니면 방법점 알켜 주셈.



도저히 모르겠음돠~



예를 들어 변수 ABC 에 'FRM_123'을 넣구



메인 폼에서 버턴을 누르면 이미 열려있는 폼 'FRM_123'을 찾아 Show 해주구 싶네요



MDI폼을 사용하시는 분은 모두 이런걸 사용 해야 한다는 걸 암니다.



그럼 즐코~





1  COMMENTS
  • Profile
    김경완 2000.09.07 06:28
    저도 간신히 알아 냈지요.



    질문에는 거의다 아신다고 했는데 제가 수십군데 질문했는데 한번도

    답변을 받지 못했습니다. 정말 너무들 하더군요. 이이이이잉.



    본 Q&A의 25056번에 제가 질문을 했었죠. 답변도 있어요. 제가 한 답변이죠.

    자 그럼 아래의 내용을 잘 참조 하시고 의문이 가거나 문서를 닫을때의 탭콘트롤과

    차일드폼을 일치하는 문제에 봉착하시면 저에게 메일을 주세요. 제가 또 겨우 알아낸

    소스를 공개하지요. 그럼 열심히........



    나모웹에디터도 이렇게 하는것 같더라구요.

    (아주 자세히 관찰한 결과임: 여러개 열고 막 이동하면 살짝 살짝 폼이동이 보임)



    procedure TMainForm.TabControl1Change(Sender: TObject);

    var

    i: integer;

    begin



    begin

    for i:=0 to MDIChildCount -1 do

    begin

    if MDIChildren[i].caption = tabcontrol1.tabs[tabcontrol1.tabindex] then

    MDIChildren[i].show;

    end;

    end;

    end;



    우리는 차일드폼을 생성시 차일드폼에 파일명을 줍니다. 그리고 tabcontrol의 tabs프로퍼트에 add메서드를 사용하여 화일이름을 동시에 삽입하지요.



    차일드폼이 생성되면서 동시에 탭에는 화일이름을 가진 탭이 하나 더 생성이 되지요.



    탭은 tabindex속성이 있어서 우리가 탭을 크릭할 경우 어떤 탭이 클릭 되었는지 이 속성으로 알수 가 있습니다. 그냥 mdichildren[tabcontrol1.tabindx] 이렇게 하면 안되지요.



    왜요. 차일드폼은 방금 우리가 본 차일드폼을 0 이라고 하고 그전에 본 폼을 1이라고 하고 하면서 우리가 현재 보고 있는 폼을 0 으로 하고 본 순서대로 숫자를 하나씩 증가 시키죠. 그래서 탭 인텍스의 숫자와 같은 차일드폼이 보일 수가 없지요.



    그래서 우리가 차일드폼을 생성시 차일드폼의 name이나 caption에 여는 화일명을 주죠.

    차일드폼에 입력된 화일명은 또한 태키의 tabs에 입력이 되어 탭이 하나 증가 하는 것이죠. 그렇죠.



    그러면 차일드폼은 일단은 생성 순서에 따라 정렬은 안되어 있어도 일정한 인텍스 숫자를 가지고 있지요. 우리가 세번째 탭인 3.txt를 크릭한 경우 3.txt의 tabindex값을 얻어서 tabcontrol의 tabs에서 화일이름을 얻어와 차일드퐁의 캡션중 같은 이름을 가진 폼을 찾아서 show메서드로 보이게 하지요.



    끝까지 읽어 주셔서 감사합니다. 본 코딩은 어디에서 힌트를 얻어서 작성한 것임.

    어딘지 기억은 안남.