안녕하세요.
PageControl 내에 버튼을 누를 때마다, TabSheet 가 동적으로 생성됩니다.
하지만, 이것을 순서에 상관없이 TabSheet 를 삭제하려고 할 때에 오류가 나는군요.
현재 TabSheet 번호는 PageControl.ActivePageIndex 를 통하여 알 수 있습니다.
procedure TFrmMain.KeyEvent(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Shift = [ssCTRL] then begin
if Key = VK_F4 then begin
try
REdit[NOW_CLIENT].Free;
Tabs[NOW_CLIENT].Free;
Dec(CLIENT_COUNT);
except on E: Exception do
ShowMessage(E.Message);
end;
end;
end;
end;
위와같이 해주었는데, 안되는군요.
각 TabSheet 에는 사용자가 간단한 메모를 입력하도록 했습니다.
var
Tabs : Array of TTabSheet;
REdit: Array of TBK_RichEdit;
와 같이 동적 배열을 사용했구요.
procedure TFrmMain.FormActivate(Sender: TObject);
begin
SetLength(Tabs, 10);
SetLength(REdit, 10);
end;
와 같이 배열에 대한 설정을 했습니다.
예를들어, 9개의 TabSheet 를 만들었는데, 4번째 TabSheet 를 삭제하고자 할 경우
어떻게 처리를 해주어야 하는지 알려주세요.
수고하세요.
var
i: Integer;
begin
NOW_CLIENT := PageControls.ActivePageIndex +1;
if Shift = [ssCTRL] then begin
if Key = VK_F4 then begin
if DevTAB[NOW_CLIENT] <> Nil then
if DevTAB[NOW_CLIENT] = PageControls.Pages[PageControls.ActivePageIndex] then begin
if CLIENT_COUNT = 1 then
Exit;
DevTAB[NOW_CLIENT].PageControl := Nil;
PageControls.RemoveControl(DevTAB[NOW_CLIENT]);
PageControls.Refresh;
PageControls.SelectNextPage(False);
Dec(CLIENT_COUNT);
Exit;
end;
end;
end;
if Shift = [ssALT] then begin
if Key = Ord('N') then menuFileNewClick(Self);
end;
end;