TabControl 개체의 형태 - Close 버튼 을 활성화(체크) 한 상태로 사용자가 탭을 닫았다가 추가를 하는 예제 입니다.
사용자가 탭의 x를 눌러 탭을 닫은 뒤에 + Tab 버튼([Command1])을 누르면 입력란([Edit])에 입력된 문자열을 탭 문자로 탭을 추가 할 수 있도록 만들어 봤습니다.
Jscript에서 GetShowPageArray() 함수는 있는데, GetHidePageArray() 함수(숨겨진 탭들의 인덱스를 읽어오는)는 없는것 같더군요..
그래서 GetShowPageArray()함수로 보여진 탭들의 인덱스를 배열에 담아와 전체 인덱스 에서 보여진 탭들의 인덱스를 제외해서 GetHidePageArray() 효과를 만들어 봤습니다.
새로 탭을 보일때는 숨겨진 탭들의 인덱스중 첫번째 인덱스를 사용 합니다..
Jscript 내용은
var strTotTab = new String();
var arrTabShow = new Array();
var arrTabHide = new Array();
var rowCount = new Number();
var rowIndex = new Number();
function oneTab(){
for(rowIndex = 1; rowIndex < 8; rowIndex++){
EDoc.GetPage("[Page1]").GetObject("[TabControl1]").HidePage(1);
}
}
function addTab(){
arrTabShow = EDoc.GetPage("[Page1]").GetObject("[TabControl1]").GetShowPageArray().toArray(); // [TabControl1]의 활성탭들의 인덱스를 읽는다.
if(arrTabShow.length==8){ // 활성탭의 최대수 제한 체크
EDoc.MessageBox("","Tab은 8개 까지만 가능합니다.");
} else{
strTotTab = "0|1|2|3|4|5|6|7|"; // 전체 활성탭의 인덱스 문자열 값
rowCount = arrTabShow.length; // 활성탭의 수 읽기
for(rowIndex = 0; rowIndex < rowCount; rowIndex++){
strTotTab = strTotTab.replace(arrTabShow[rowIndex]+"|",""); // 전체 탭의 인덱스 문자열에서 활성탭의 인덱스 제거
}
arrTabHide = strTotTab.split("|"); // 전체 탭 인덱스에서 활성 탭 인덱스를 제거한 문자열을 비활성 탭 인덱스 배열에 담기.
rowIndex = parseInt(arrTabHide[0],10); // 배열 arrTabHide의 Index(0)의 값을 10진 정수로 변환해서 rowIndex에 담는다.
EDoc.GetPage("[Page1]").GetObject("[TabControl1]").ShowPage(rowIndex); // 비활성 탭 인덱스 배열의 첫번쨰 인덱스를 활성탭으로 변경
EDoc.GetPage("[Page1]").GetObject("[TabControl1]").SetItemText(rowCount, " "+EDoc.GetValue("[Edit1]")+" "); // 활성탭의 제목 바꾸기
}
}
이렇게 작성 했습니다.