Edit가 1~10까지 있을때,
Edit.Tag에 각각의 Edit의 Tag에 1~10까지 넣어주고, for Loop를 1~10 까지 돌려서 각각의 Edit에 값을 넣으려고 합니다.
Tag를 어떻게 이용해야 하나요.
몇개 검색해 봤는데, 응용이 잘 안되는 군요.
결국, for loop시에 i번째에는 Tag가 i인 Edit를 어떻게 얻을 수 있느냐 하는 것인데요. 잘 모르겠네요.
TC0mponent(), TControl(), TObject() 이러한 것들의 ()에는 어떤걸 인자로 넣어서 사용해야 하는지 개념이 안잡힙니다.
혹은 TEdit(), TTabSheet() 등의 ()에도 어떤걸 인자로 써야 하는지요.
공용인 TControl()하고, 좀더 세부적인 콘트롤을 명시하는 TEdit()하고는 분명 그 사용이 다르겠죠?
개념이 안 잡히네요.
부탁드립니다.
> Edit가 1~10까지 있을때,
> Edit.Tag에 각각의 Edit의 Tag에 1~10까지 넣어주고, for Loop를 1~10 까지 돌려서 각각의 Edit에 값을 넣으려고 합니다.
> Tag를 어떻게 이용해야 하나요.
>
> 몇개 검색해 봤는데, 응용이 잘 안되는 군요.
> 결국, for loop시에 i번째에는 Tag가 i인 Edit를 어떻게 얻을 수 있느냐 하는 것인데요. 잘 모르겠네요.
>
> TC0mponent(), TControl(), TObject() 이러한 것들의 ()에는 어떤걸 인자로 넣어서 사용해야 하는지 개념이 안잡힙니다.
> 혹은 TEdit(), TTabSheet() 등의 ()에도 어떤걸 인자로 써야 하는지요.
> 공용인 TControl()하고, 좀더 세부적인 콘트롤을 명시하는 TEdit()하고는 분명 그 사용이 다르겠죠?
>
> 개념이 안 잡히네요.
> 부탁드립니다.
안녕하세요~
Edit 10개를 For루프로 돌린다면 For가 접근할수 있도록 배열이 필요하겠죠.
방법은 여러가지가 있겠지만 폼의 Controls 배열을 이용한다면 말씀하신대로
Tag를 비교해야 할겁니다. 그럴려면 비교하는 For가 하나더 필요하겠죠.
for i:=1 to 10 do
for j:=0 to ControlCount -1 do
if (Controls[j] is TEdit)and(Controls[j].Tag=i) then begin
// 여기서 원하시는 작업을 하시면 됩니다.
end;
또 다른 방법으로 배열을 이용할수 있습니다. 이게 더 효과적이죠.
var aa:array[1..10] of TControl;
...
for i:=0 to ControlCount -1 do
if Controls[j] is TEdit then aa[Controls[j].Tag]:=Controls[j];
for i:=1 to 10 do begin
// 여기서 aa[i]를 접근하시면 됩니다.
end;
TControl(), TObject() 라는것은 객체의 타입캐스팅을 뜻합니다.
예를들어...
var Control:TControl; // 이런 변수를 선언했다면...
Control:=Edit1; // 이런 문법이 가능합니다. 왜냐면 TEdit는 TControl의
자손이기 때문입니다.
그런데 이렇게 받은 객체는 TControl일까요? 아니면 TEdit일까요?
인스턴스는 분명 TEdit입니다. 그러나 Control이라는 변수를 사용한다면
TControl의 능력을 벋어날수 없습니다. 그래서 다음처럼 타입캐스팅이 필요한겁니다.
TEdit(Control).text:='어쩌구저쩌구';
그러나 만약 Control 변수의 인스턴스가 TEdit가 아니라면 에러가 발생합니다.
그래서 위의 예제에서도 (Controls[j] is TEdit) 이런식으로 먼저 점검한거죠.
그럼 이만... 좋은하루 되세요~