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

TTabSheet元件如何使用FindComponent???

尚未結案
rich777
一般會員


發表:25
回覆:25
積分:10
註冊:2002-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-11 16:32:43 IP:139.175.xxx.xxx 未訂閱
請問各位高打先進們~~~ 我在Form(A) 以呼叫另一個Form(B) 並將TPageControl當參數傳給了Form(B) 參數的接收與傳地都沒問題... 但當我想以取得TPageControl中TTabSheet某些元件值時卻發生了問題 註:SelPC:TPageControl; Var i,J:integer; TS: TTabSheet; TL: TLabel; cbHead,cbFloot:TComboBox; begin FOR I := 0 TO (SelPC.ControlCount)-1 DO begin TS:=SelPC.Pages[i]; for J := 0 to TS.ControlCount-1 do begin if TS.Controls[j] is TLabel then begin if COPY(TS.Controls[j].Name,1,2)='EH' then begin showmessage(TS.Controls[j].Name); (A)TL:=TS.Components[j].FindComponent(TS.Controls[j].Name) as TLabel; (B)TL:=TS.FindComponent(TS.Controls[j].Name) as TLabel; (C)showmessage(TL.Caption); end; end; end; end;// FOR I := 0 TO (SelPC.ControlCount)-1 DO end; (A)(B)二行的功能是一樣的.... run (A) 時出現"串列(list)索引超出邊界"的錯誤訊息 run (B) 時沒錯誤訊息但(C)卻顯示空白...表示TL沒真的接受到資料 我可以確定TTabSheet上有六個元件...有二個是屬TLabel而且都有Caption值 不知是那裡有錯了...煩請高手們解惑???
hagar
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-11 16:52:19 IP:202.39.xxx.xxx 未訂閱
用 FindControl 吧! --- 每個人都是一本書
rich777
一般會員


發表:25
回覆:25
積分:10
註冊:2002-04-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-11 17:21:00 IP:139.175.xxx.xxx 未訂閱
謝謝版大回覆 我用的是Delphi3沒看到可以用FindControl的方法耶??? 當我使用TS.ComponentCount..時得到的是零 但當TS.ControlCount時得六沒錯...我TTabSheet上是有六個元件 TL:=TS.Components[j].FindComponent(TS.Controls[j].Name) as TLabel; 可見得上列錯誤是由於Components=0而引起的... 若沒使用Components的方式找出我要的元件的話...不知是否還有他法???
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-11 17:27:24 IP:218.16.xxx.xxx 未訂閱
哎呀,打完傳送時死掉了又要重新再打
hagar
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-11 17:31:13 IP:202.39.xxx.xxx 未訂閱
引言: 哎呀,打完傳送時死掉了又要重新再打 < face="Verdana, Arial, Helvetica"> 不是可以按 "前一頁" 取得剛打的 (可主題無關) --- 每個人都是一本書
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-11 17:46:04 IP:218.16.xxx.xxx 未訂閱
引言: 不是可以按 "前一頁" 取得剛打的 (可主題無關) < face="Verdana, Arial, Helvetica"> 平常就是的,這次不記得這個視窗是甚麼來的所以按了 Refresh ,之後按前一頁都只得空的內文 我打這篇文時還沒看到 >
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-11 18:43:56 IP:210.243.xxx.xxx 未訂閱
引言: 但當TS.ControlCount時得六沒錯...我TTabSheet上是有六個元件 ... ... 若沒使用Components的方式找出我要的元件的話...不知是否還有他法???
另類解法 如果是純粹要找tcontrol類型 可以掃描parent是ttabsheet的 for example
procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
begin
   for i:=0 to tabsheet1.ControlCount-1 do begin
     if tabsheet1.Controls[i] is tlabel then begin
        tlabel(tabsheet1.Controls[i]).Color:=clred;
     end;
   end;
end;    
1.在form上擺一個pagecontrol開兩個tabsheet, 2.在tabsheet1上擺一個label, 3.在form 上再擺一個button,在click事件寫如上的程式碼. 4.然後按F9. Fear is the path to the dark side. Fear leads to anger.Anger leads to hate.Hate leads to suffering....
rich777
一般會員


發表:25
回覆:25
積分:10
註冊:2002-04-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-14 11:10:08 IP:139.175.xxx.xxx 未訂閱
誠如Justmade版大所言 在Form裡所有的物件都屬Component 但在TTabSheet裡的物件都屬Control 所以我以TS.ControlCount得6 但以TL:=TS.Components[j].FindComponent(TS.Controls[j].Name) as TLabel; 卻發生錯誤....因TTabSheet裡的物件都屬Control而非Component 現在我主要的目的是要將每個不同的TTabSheet物件都抓出來... 若以FormA.FindComponent雖然可以找到所有的物件但卻分不出來是屬那個TTabSheet的??? 以hahalin的方式可以抓取到物件的名稱了... 但卻無法抓取caption的值耶????
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-14 12:18:53 IP:218.16.xxx.xxx 未訂閱
哎呀你還是沒明白喔 所有 TControl 都是 TComponent 啦,因為 TControl 就是 TComponent 的子代。 所以 TLable 既是 TControl, 亦是 TComponent。 一個 TabSheet 或 Panel 或任何可以裝其他 Control 的原件,會有他所裝的 Control 清單,你可在它的 Controls[i] 裡找到子 Control。 但是它們卻不會記住他所裝著的 Component 清單,因為Component 是屬 Form 所有,只有 Form 才有 Component 清單 重申一次 TLable 既是 TControl 亦是 TComponent, 作為一個 Control ,它的 Parent 是 TS ,可用 TS.FindControl 來找 (若你的Delphi版本支援) 但作為一個 Component,它的 Owner 是 FormA,可用 FormA.FindComponent 來找 我不明白你為可不能用 (B)TL:=FormA.FindComponent(TS.Controls[j].Name) as TLabel; 結果就是你想要的 若你沒有使用 FormA 的 Unit 或 FormA 的名稱可能不同,你甚至可用 SelPC.Owner.FindComponent(TS.Controls[j].Name) as TLabel; 發表人 - Justmade 於 2003/04/14 12:21:08
rich777
一般會員


發表:25
回覆:25
積分:10
註冊:2002-04-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-14 13:51:27 IP:139.175.xxx.xxx 未訂閱
感謝Justmade版大的熱心回覆,終於搞定了~~~
系統時間:2024-06-28 2:27:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!