C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[4883] Re:가르쳐주세요 -> N번째 레이블 찾기
박지훈.임프 [cbuilder] 2848 읽음    2001-01-12 18:25
서훈범 님이 쓰신 글 :
: 만약에 Label1 - Label60 까지 있다고 했을때,
:
: 정수 N이 있습니다.
:
: 그럼 그 변수에 해당하는 LabelN 이 실행할수 있는 방법.
:
: switch() 말고는 없는지요?
:
: 좀 상세히 좀 가르쳐 주세요.
:
: 그럼 이만.
:


임펠리테리입니다.

두가지 방법이 있습니다.

첫번째. 좀 단순무식하지만 실행시 속도는 더 빠릅니다.
다음과 같이 레이블 컴퍼넌트의 포인터 배열을 만들고 (레이블을 생성하는 것이 아닙니다),
TLabel *Labels[60];
초기에(OnCreate 등에서) 다음과 같이 실제 레이블 컴퍼넌트들의 포인터를 넣으세요.
Labels[0] = Label0;  // 헷갈리지 않으시려면 시작 번호를 0부터 하는게 좋겠죠?
Labels[1] = Label1;
Labels[2] = Label2;
...
Labels[59] = Label59;
그리고 N번째의 레이블을 실제로 사용할 때는 Labels[N]이라고 하면 됩니다.

두번째 방법. 코드도 간단하고 조금 더 고급스러운 방법이지만 속도는 조금 느립니다.
해당 폼안에 있는 모든 컨트롤들의 이름을 조사해서 LabelN 이름을 가진 컨트롤을 찾는 겁니다.
AnsiString NameOfLabel = AnsiString("Label") + AnsiString(N);
for(int i=0; i<ControlCount; i++)
    if(Controls[i].Name == NameOfLabel)
        // LabelN을 찾았다!!!
짐작하시겠지만, 이 방법을 사용하면 폼 안의 컨트롤이 많으면 많을수록 속도가 느려집니다. 하지만 폼안에 레이블을 제외한 컨트롤이 별로 많지 않은 경우라면 사용할만 하겠지요.

그럼 참고하시길...

+ -

관련 글 리스트
4867 가르쳐주세요 서훈범 2751 2001/01/11
4883     Re:가르쳐주세요 -> N번째 레이블 찾기 박지훈.임프 2848 2001/01/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.