TTabSheet元件如何使用FindComponent??? |
尚未結案
|
rich777
一般會員 發表:25 回覆:25 積分:10 註冊:2002-04-22 發送簡訊給我 |
請問各位高打先進們~~~
我在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 發送簡訊給我 |
|
rich777
一般會員 發表:25 回覆:25 積分:10 註冊:2002-04-22 發送簡訊給我 |
謝謝版大回覆
我用的是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 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
引言: 但當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 發送簡訊給我 |
誠如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 發送簡訊給我 |
哎呀你還是沒明白喔 所有 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |