Q&A

  • 동적으로 만든 TabSheet 삭제하려면..
안녕하세요.



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 를 삭제하고자 할 경우



어떻게 처리를 해주어야 하는지 알려주세요.



수고하세요.



1  COMMENTS
  • Profile
    방기남 2001.02.23 09:56
    procedure TFrmMain.KeyEvent(Sender: TObject; var Key: Word; Shift: TShiftState);

    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;