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

指定元件可以是變數嗎 ?

尚未結案
cwc65536
初階會員


發表:47
回覆:121
積分:48
註冊:2004-10-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-22 12:54:51 IP:203.203.xxx.xxx 未訂閱
我有 100 個 Label1 到 Label100  請教可以用 變數來指定我要改變的元件嗎 ? 我現在都用 
i:=10;
case i of
 1: Label1.caption := 'test';
 2: Label2.caption := 'test';
  .
  .
 100: Label100.caption := 'test';
end;
很笨的寫法 , 能夠改善嗎 ?
T.J.K
中階會員


發表:3
回覆:35
積分:57
註冊:2005-06-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-22 13:37:21 IP:211.78.xxx.xxx 未訂閱
cwc65536 您好: 可用 ComponentCount 來寫比較好 如此比較好去維護你的程式
procedure TForm1.Button1Click(Sender: TObject);
Var
  ALabel: TLabel;
  AIndex : Integer;
begin
  for AIndex := 0 to Self.ComponentCount - 1 do
    if  Self.Components[AIndex] is TLabel  then
    begin
      ALabel := TLabel( Self.Components[AIndex] );
      if ALabel.Name = 'Label10' then
        ALabel.Caption := 'Test';
    end;
end;        
ayachan
一般會員


發表:7
回覆:8
積分:8
註冊:2004-04-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-22 13:44:20 IP:203.204.xxx.xxx 未訂閱
Hi cwc65536 您好    請參考下面的小小 sample:
 
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to (Form1.ControlCount-1) do
    if (Form1.Controls[i] is TLabel) then
      TLabel(Form1.Controls[i]).Caption:='Test';
end;
如果中間需還有什麼變化的話,個人建議您可以使用 Tag 再做分別。 例如 Label50 ~ Label75 的 Caption 要為 'Test2' 的話:
 
  for i:=0 to (Form1.ControlCount-1) do
    if (Form1.Controls[i] is TLabel) then
      if (TLabel(Form1.Controls[i]).Tag in [50..75]) then
        TLabel(Form1.Controls[i]).Caption:='Test2'
      else 
        TLabel(Form1.Controls[i]).Caption:='Test';
就可以了
mine
中階會員


發表:28
回覆:129
積分:56
註冊:2004-03-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-22 14:59:24 IP:61.221.xxx.xxx 未訂閱
插花懶人寫法 for i:=1 to 100 do TLablel(FindComponent('Label' IntTostr(i))).Caption:='test'; 搞不懂!搞不懂!永遠都搞不懂!!
cwc65536
初階會員


發表:47
回覆:121
積分:48
註冊:2004-10-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-22 18:16:19 IP:203.203.xxx.xxx 未訂閱
mine 您好 我也是懶人, 請問 Component 的有效範圍是: 整個程式 or Form ? 我在 DataModule 中, 要設定 Form1.Label1 的 caption , 如何作 ?
mine
中階會員


發表:28
回覆:129
積分:56
註冊:2004-03-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-23 09:38:39 IP:61.221.xxx.xxx 未訂閱
大大你好 Findcomponent 範圍僅就單一個form 類似函數應用還有很多例如樓上二位大大所提的,sendmessage的應用 Uses unit1; for i := 1 to 100 do TLabel(form1.FindComponent('label' intTostr(i))).Caption:='test'; 搞不懂!搞不懂!永遠都搞不懂!! 發表人 - mine 於 2005/08/23 09:42:06
系統時間:2024-05-19 12:44:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!