如何計算元件數量? |
尚未結案
|
green10
一般會員 ![]() ![]() 發表:7 回覆:2 積分:1 註冊:2004-04-22 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 那要如何計算出TabSheet1 & TabSheet2 個別放入的元件數量?green10 你好 使用Tabsheet1.ComponentCount 就是你要的元件數量 只要繼承自TComponent的元件皆有這個屬性 PageControl1.ComponentCount=>PageControl1包含幾個元件 Form1.ComponentCount =>Form1包含幾個元件 以此類推 For i:=0 To TabSheet1.ComponentCount-1 Do Begin If Tabsheet1.Components[i] Is TEdit Then // 檢查第i個元件是否為TEdit TEdit(Tabsheet1.Components[i]).Text := 'xxxx';//個別處理 End; 發表人 - chance36 於 2004/04/22 18:15:24 |
change.jian
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
您好,如下:
procedure TForm1.BitBtn1Click(Sender: TObject); var i,iCount:Integer; begin iCount:=0; for i:=0 to Self.ComponentCount-1 do begin if (Self.Components[i].GetParentComponent = TabSheet1) then //計算TabSheet1 inc(iCount); end; ShowMessage(IntToStr(iCount)); end; |
green10
一般會員 ![]() ![]() 發表:7 回覆:2 積分:1 註冊:2004-04-22 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 不過為何不能像form1.ComponentCount相同 直接用tabsheet1.componentCount計算出元件的數量??green10 你好 實測了一下,真的如你所說無法用tabsheet1.componentCount 取出內含的元件數量,看Help說ComponentCount是取出其所屬的元件(即元件的Owner為tabsheet1者,)一般在設計時從元件盤接的元件,其Owner皆為Form1,只是Parent為TabSheet1而己,如此看來又須自行撰寫程式來計算了 Function TForm1.getchildComponentCount(component:TControl):Integer; Var i : Integer ; c : TControl; Begin result:=0; For i:= 0 To self.ComponentCount-1 Do Begin If Not (Self.Components[i] Is TControl) Then Continue ; c := TControl(Self.Components[i]); If c.Parent<> nil Then begin While assigned(c.Parent) And (c.Parent<> Component) And (c.Parent<>Self) Do Begin c := c.Parent; If c.Parent = nil Then Break ; End; If (c.Parent<> nil) And (c.Parent= Component) Then Inc(Result); End; End; End; |
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 插個花, 請別介意, 應該是 ControlCount 吧. ComponentCount 須從 owner (很可能是 TForm)去取得元件數, 問題是...還要 區分出 Parent 是 TTabSheet 的子元件.Mickey 大大 感謝都來不及,那會介意? 我還在懷疑 Delphi有提供ComponentCount為何沒有ControlCount(現在才知道此屬性名稱),謝謝你提供資訊,讓我又多學了一招。 剛試一下,controlcount它只計算其直屬的元件數,例如Tabsheet1->panel1->Edit1 ,Edit2 此時tabsheet1.Controlcount=1 => 只算Panel1,而Panel1下的各個Edit並未算進去,而Panel1.Controlcount = 2 ==>算Edit1及Edit2兩個元件 無論如何,知道了delphi物件提供的屬性原則,其他的就好辦了 發表人 - chance36 於 2004/04/22 21:28:35 |
change.jian
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
引言: 謝謝上面的大大, 不過為何不能像form1.ComponentCount相同 直接用tabsheet1.componentCount計算出元件的數量??TComponent的ComponentCount表示的是該元件擁有多少元件,這裡所謂的擁有,指的是那些元件是由這個元件所產生.其實總括一句,就是Owner與Parent的差別. Owner元件在自己本身被free前,負責把他本身所擁有的元件一一free掉.而這裡的ComponentCount,Components等,指的就是本身元件所擁有的元件. 至於Parent,主要負責繪圖(在畫面上顯示)的工作.以您的例子而言,當TabSheet1被要求refresh時,TabSheet1會負責呼叫在他上面的那幾個TEdit的refresh事件,要求他們也要重繪自己.所以,如果您在程式動態產生一個元件(如TEdit),但沒有指定這個元件的Parent的話,您在畫面上是看不到的.因為沒有人叫他們重繪自己 所以,在我給您的例子中,用Self.ComponentCount去找到畫面上的所有元件,因為這些元件的Owner就是Form1.(除非您自己寫程式動態產生TEdit) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |