全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1675
推到 Plurk!
推到 Facebook!

動態元件名稱

 
weber
初階會員


發表:24
回覆:56
積分:26
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-05-10 12:16:38 IP:61.217.xxx.xxx 未訂閱
各位好: 請教一個問題,我的畫面有 Edit1,Edit2,.....Edit20 當我要初使化它們的 Text 時,我必須寫20行指今,例 Edit1.Text:=''; Edit2.Text:=''; .... Edit20.Text:=''; 想用一個Loop完成 for i:=1 to 20 do begin s:='Edit' IntToStro(i) ????????.Text:=''; end; 請問 ?????? 內該如何寫,先謝謝了.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-05-10 12:43:05 IP:211.22.xxx.xxx 未訂閱
var edt: TEdit;
  i: Integer;
begin
  for i := 1 to 20 do begin
    edt := FindComponent('Edit'   IntToStr(i)) as TEdit;
    edt.Text := ''
  end;
end;
 
weber
初階會員


發表:24
回覆:56
積分:26
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-05-11 03:28:48 IP:61.216.xxx.xxx 未訂閱
可以了,謝謝.
tommyli0913
一般會員


發表:9
回覆:19
積分:5
註冊:2004-02-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-05 17:53:42 IP:211.76.xxx.xxx 未訂閱
請問hagar先進: 因剛好也碰到類似的問題,雖這篇文章已久遠,但仍想問hagar先進一個問題,您的方法在靜態元件是可以的,但是在動態陣列元件上要如何使用呢? 我的動態陣列元件是 NewEdit[1] ~ NewEdit[20],但其"Name"並非一致性,如 NewEdit[1].Name:='RTest" , NewEdit[2].Name:="LTest",.....等等,當我想找"LTest"名稱的元件時,目前我是用for迴圈來找出我要的元件來,但是是否有像"FindComponent"函數可以直接找到並應用之呢?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-05 17:58:20 IP:202.39.xxx.xxx 未訂閱
您好, 用 FindComponent 也可以, 例:
var
  edt: TEdit;
begin
  edt := FindComponent('LTest') as TEdit;
  if edt <> nil then
    ShowMessage('找到了 Name 為 LTest 的 Edit');
end;
或者可以 Components 與 ComponentCount 搭配使用, 例:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  edt: TEdit;
begin
  for i := 0 to Form1.ComponentCount - 1 do
  brgin
     if (Form1.Components[i] is TEdit)
       and (Form1.Componnts[i].Name = 'LTest' then
     begin
       edt := TEdit(Form1.Components[i]); // 找到了 Name 為 'LTest' 的 TEdit
       Break; // 找到了就不用再找下去了
     end;
  end;
end;
-- 向 KTop 的弟兄們致敬! 發表人 - hagar 於 2004/08/05 18:02:19
tommyli0913
一般會員


發表:9
回覆:19
積分:5
註冊:2004-02-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-05 23:48:22 IP:211.76.xxx.xxx 未訂閱
hagar先進: 我的程式如下: private NewEdit:array[1..3] of Tedit; ........... procedure TForm1.FormCreate(Sender: TObject); var i:integer; const pp:array[1..3] of string=('RTest','Ltest','PTest'); begin for i:=1 to 3 do begin NewEdit[i]:=TEdit.Create(Owner); NewEdit[i].Name :=pp[i]; NewEdit[i].Parent:=Form1; NewEdit[i].Visible :=True; NewEdit[i].Left :=10*i; NewEdit[i].Top :=10*i; NewEdit[i].Text :='TestWord' inttostr(i); end; end; procedure TForm1.Button1Click(Sender: TObject); var edt: TEdit; begin edt := FindComponent('RTest') as TEdit; if edt <> nil then ShowMessage('找到了 Name 為 LTest 的 Edit'); end; 上面的程式並無法找到RTest的元件說,目前我是用如下程式: procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=1 to 3 do begin if NewEdit[i]='RTest' then begin ShowMessage('找到了 Name 為 RTest 的 Edit'); break; end; end; end; 但如此程式動態元件少倒還好,但元件多時,效率就不太好,今看到FindComponent函數實在興奮但卻不知如何用之??或有什麼方法或函數可以直接使用呢?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-06 07:53:55 IP:202.39.xxx.xxx 未訂閱
先了解一個概念, 以這句 Form1.FindComponent(AName: string) 來做說明 這句的意思是尋找 Onwer 為 Form1, 而 Name 屬性值為 AName 的 TComponent 再來看您的問題
procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
const
  pp: array[1..3] of string = ('RTest', 'Ltest', 'PTest');
begin
  for i:=1 to 3 do
  begin
     NewEdit[i] := TEdit.Create(Owner); // 問題出在這句, 此時 NewEdit[i] 的 Owner 是 Form1 的 Owner, 那 Form1 的 Owner 是誰呢?是 TApplication, 您可以改成: NewEdit[i] := TEdit.Create(Self); 試試
     // ..
  end;
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  edt: TEdit;
begin
  edt := FindComponent('RTest') as TEdit; // 這句的 FindComponent 的用意是要找 Owner 為 Form1 且 Name 屬性值為 'RTest' 的 TComponent, 配合上面的問題點所在, 所以找不到了, 因 Name 屬性值為 'RTest' 的 TEdit 其 Owner 為 TApplication, 不是 Form1 了
  if edt <> nil then
    ShowMessage('找到了 Name 為 LTest 的 Edit');
end;
-- 向 KTop 的弟兄們致敬!
tommyli0913
一般會員


發表:9
回覆:19
積分:5
註冊:2004-02-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-06 09:33:40 IP:211.76.xxx.xxx 未訂閱
hagar先進: 原來問題是在那兒Y~,hagar先進真是謝謝您了,問題解決了,謝謝!
系統時間:2024-06-28 19:17:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!