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메서드로 보이게 하지요.
질문에는 거의다 아신다고 했는데 제가 수십군데 질문했는데 한번도
답변을 받지 못했습니다. 정말 너무들 하더군요. 이이이이잉.
본 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메서드로 보이게 하지요.
끝까지 읽어 주셔서 감사합니다. 본 코딩은 어디에서 힌트를 얻어서 작성한 것임.
어딘지 기억은 안남.