Q&A

  • PageControl의 컴포넌트 초기화...
TPageControl 에 TabSheet1,TapSheet2......를 추가하고요
이제 탭시트에 TEdit,ComBoBox,TImage...... 막 놓았습니다.
아래는 판넬위의 컴포넌트를 초기화 하는 소스인데요...
저넘을 PageControl1 또는 TabSheet1으로 바꾸어 사용 하려면 어찌 해야 하나요???   이리저리 해봐 도 안되네요...

with Panel1 do begin
     for i := 0 to Controlcount -1 do begin
         if Controls[i] is Tedit then
            Tedit(Controls[i]).clear else
         if Controls[i] is TCheckBox then
            TCheckBox(Controls[i]).Checked := False else
         if Controls[i] is TKNumberEdit then
            TKNumberEdit(Controls[i]).value := 0 else
         if Controls[i] is TComboBox then
            TComboBox(Controls[i]).Text := '' else
         if Controls[i] is TMaskEdit then
            TMaskEdit(Controls[i]).Clear;
     end;
end;
3  COMMENTS
  • Profile
    하얀까마귀 2003.02.25 03:27
    안녕하세요 하얀까마귀 입니다.

    질문이 뭔지 잘 모르겠네요.

    아래 소스는 현재 판넬 (Panel1)을 부모로 하는 모든 콤포넌트를 검사해서
    해당 콤포넌트들의 값들을 초기화 하는겁니다.
    그런데. 이걸 실제 콤포넌트 이름을 넣는다면 아래의 소스자체가 필요없겠죠.
    그냥
      PageControl1.ActivePageIndex := 1; 뭐 이런식으로 하시면 되겠죠.

    단지 저기에 초기화 하는곳에 페이지 콘트롤과 탭쉬트 콘트롤을 추가하고싶으
    신거라면
    if Controls[i] is TPageControl) then
      TPageControl(Controls[i]).ActivePageIndex := 0;
    if Controls[i] is TTabSheet then
      TTabSheet(Control[i]).Visible := True;

    뭐이런식으로 하시면 되겟
  • Profile
    아폴론 2003.02.25 04:04
    폼에 Panel컴포넌트를 가져다 놓았습니다.
      그 판넬에 TPageControl 을 가져다 놓았습니다.
         이제 그 TpageControl에 New Page를 실행해서 TabSheet가 8개
         생겼습니다.
      각 TabSheet에는 Tedit, ComBpBox, Timage....등의 컴포넌트를 올려놓았
        습니다.  

    질문 저는 TabSheet위에 있는 컴포넌트들을  초기화 하고 싶습니다.
    각 TabSheet마다 컴포넌트들이 수십개식 있습니다.
    그래서 위의 소스를 고쳐서 사용 해 보려 했는데... 방법이 있을까요?

    //아래 소스도 안되고...
    with TabSheet1 do begin
         for i := 0 to Controlcount -1 do begin
             if Controls[i] is Tedit then
                Tedit(Controls[i]).clear ;  ==>요기서 에러
         end;
    end;

    //아래도 안되네요...
    with PageControl do begin
         for i := 0 to Controlcount -1 do begin
             if Controls[i] is Tedit then
                Tedit(Controls[i]).clear ;  ==>요기서 에러
         end;
    end;


  • Profile
    하얀까마귀 2003.02.25 19:59
    안녕하세요 하얀까마귀 입니다.

    ^^ 제가 질문이해를 잘못했군요.. 죄송..
    먼저.. ControlCount 와 Controls 는 해당 콤포넌트의 자식에만 해당됩니다.

    그러니깐 아래의 소스처럼하면 아마 페이지콘트롤하나만 되겠죠.
    해서..
      for i := 0 to Tabsheet1.ColtrolCount-1 do
      begin
         if TabSheet1.Controls[i] si Tedit then
           TEdit(TabSheet1.Controls[i]).Clear;
      end;

    이런식으로 각각 해주셔야 합니다.

    속직히 좀 귀찮죠?

    아니면 제귀호출로 위의 것을 만드셔야 되구요..

    아래의 문장에서 에러가 나는건 좀 이해가 안되는 군요.

    간혹  Controls 는 모든 콤포넌트에는 다 있는것이니까
    다른걸 읽을수도 잇으니 위의 것처럼 with 쓰지 마시고 한번 해보세요.

    폼에 있는 모든 콤포넌트를 클리어 하는건데..

    조금 고쳐서 쓰시면 될껍니다.

    이건 에디트랑 콤보박스만 넣었거든요.. 나머지와 초기치 값은

    맞게 넣어줘 보세요..
    그럼. 즐거운 시간 되세요..

    procedure TForm1.WCInitComponent(Comp: TWinControl);
    var
      i : integer;
    begin
      for i := 0 to Comp.controlcount-1 do
      begin
        if Comp.Controls[i] is TEdit then
          TEdit(Comp.Controls[i]).Clear
        else if Comp.Controls[i] is TPageControl then
          TPageControl(Comp.Controls[i]).ActivePageIndex := 0
        else if Comp.Controls[i] is TTabSheet then
          TTabSheet(Comp.Controls[i]).Visible := True
        else if Comp.Controls[i] is TComboBox then
          TComboBox(Comp.Controls[i]).ItemIndex := 0;

        if Comp.Controls[i] is TWinControl then
        begin
          WCInitComponent(TWinControl(Comp.Controls[i]));
        end;
      end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      WCInitComponent(TWinControl(self));
    end;