|
서훈범 님이 쓰신 글 :
: 만약에 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을 찾았다!!!
짐작하시겠지만, 이 방법을 사용하면 폼 안의 컨트롤이 많으면 많을수록 속도가 느려집니다. 하지만 폼안에 레이블을 제외한 컨트롤이 별로 많지 않은 경우라면 사용할만 하겠지요.
그럼 참고하시길...
|