Q&A

  • 콤포넌트 배열에 대해서 질문 올립니다.
edtCode : array[0..5] of Tedit;

폼에 에디트박스를 5개를 만들고, 비베에서 처럼 인덱스를 달아서 배열처럼 사용할려고 배열선언은 했는데,
그 다음에 무엇을 해줘야 될지 모르겠군요.
비베에서처럼 edit박스의 이름을 edtcode[0],edtcode[1]...로 바꾸니까 안되던데요...

에디트박스 5개의 내용을 for문으로 돌리려고 합니다. 실제로는 제가 for문을로 돌려야 할 에디트박스가 200개입니다.
1  COMMENTS
  • Profile
    이중철 2004.07.16 00:06
    추측컨데 이미 만들어진 에디터박스를 배열로 처리할 작정인가봅니다..
    이경우 몇가지 방법중 하나는 아래와 같이
    var editcode : array of Tedit;
    이렇게 정의하고
    초기화시(초기설정프로그램)
    Setlength(editcode, 200);
    editcode[0] := edit1;  {Tedit1.. 은 님께서 만든 실제 에디터 박스명)
    editcode[1] := edit2;
    editcode[2] := edit3;
    editcode[3] := edit4;
    editcode[4] := edit5;
    그 이후에 프로그램에서
    editcode 로 쓰면 되고요
    두번째는 위의 방법에서 초기설정프로그램 노가다가 싫다면
    에디터박스의 Tag property를 사용하여
    폼의 Componets 또는 Controls을 사용하는 방법입니다.
    세번째는 두번재방법에서 tag를 다른용도로 이미 쓰고 있다면
    컴퍼넌트를 만들어서 아예 등록해서 쓰는 방법입니다.
    TUserEdit = class(TEdit)
      Public
       Index : integer;
    end;
    이런식으로하고 위의 두번째방법을 쓰면 됩니다.
    for i := 0 to Form1.ComponentCount - 1
    begin
      if  Form1.Components[i] is TUserEdit then
      begin
        ....
      end;
    end;
    이걸 함수로 만들면
    Function GetUserEdit(Index : integer) : TUserEdit;
    begin
    result := nil;
    for i := 0 to Form1.ComponentCount - 1
    begin
      if  Form1.Components[i] is TUserEdit then
      begin
         if Index = Form1.Components[i] as TUseredit.Index then
         begin
            Result := Form1.Components[i] as TUseredit;
            exit;
         end;
      end;
    end;
    end;

    이렇게 되겠죠