하나의 폼위에 에디트박스가 20개정도 있읍니다.. 그런데 제가 특정 버튼을 클릭하면 모든 에디트박스의 내용을 지워줄려고 합니다. 깨끗하게... clear;;;;; 지금은 일일이 edit1.text :=''; edit2.text :=''; . . . edit20.text :=''; 이...
CALI
•
1999.12.17 23:04
클릭 wrote:
> 하나의 폼위에 에디트박스가 20개정도 있읍니다.. 그런데 제가 특정 버튼을 클릭하면
> ...
혀노
•
1999.12.17 22:07
아래 코드를 사용하세요...
for i:=1 to ComponentCount-1 do
if (Components[i] is TEdit) then
(Co...
> 하나의 폼위에 에디트박스가 20개정도 있읍니다.. 그런데 제가 특정 버튼을 클릭하면
> 모든 에디트박스의 내용을 지워줄려고 합니다. 깨끗하게... clear;;;;;
> 지금은 일일이
> edit1.text :='';
> edit2.text :='';
> .
> .
> .
> edit20.text :='';
> 이렇게 했는데 이거야원 어디 귀찬아서..
> 혹시 다른방법은 없는지요...
> 부탁드립니다...
>
혀노 님의 답변도 맞지만 만약 edit1 ~ edit20 이외의 Edit box가 있다면 그 이외의
Edit Box의 내용도 삭제 됩니다.
아래의 내용은 일반 object의 이름을 변수 처럼 사용 할 수 있는 Function 입니다.
function foClassByName(agFm: TObject; agStr: String) : TObject;
Type
PForm = ^TForm;
var
Form : PForm;
Loop : Integer;
begin
Form := @agFm;
Result := nil;
for Loop := 0 to Form^.ComponentCount-1 do
begin
if UpperCase(Form^.Components[Loop].Name) = UpperCase(agStr) then begin
Result := Form^.Components[Loop];
break;
end;
end;
end;
위의 function을 호출하는 방법을 예를 들자면
TForm1.Button1Click(Sender .......)
var i : int ;
begin
for i := 1 to 20 do
begin
TEdit(foClassByname(Tform1,'Edit'+inttostr(i))).Text := '' ;
end ;
end ;
object의 이름은 edit1 ~ edit20 까지 이어야 합니다.
만약 1 ~ 30 까지의 label에 caption을 1,2,3,4... 30 까지 적고 싶다면
TForm1.Button1Click(Sender .......)
var i : int ;
begin
for i := 1 to 30 do
begin
Tlabel(foClassByname(Tform1,'label'+inttostr(i))).caption:=inttostr(i);
end ;
end ;
이렇게 사용합니다. 참고로 foclassbyname 은 delphi 거의 모든 object에
사용가능합니다. 특히 qreport에서는 아주 유용하게 쓸 수 있습니다.