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

如何計算元件數量?

尚未結案
green10
一般會員


發表:7
回覆:2
積分:1
註冊:2004-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-22 18:05:27 IP:210.243.xxx.xxx 未訂閱
請問 若A Form放入一個PagecControl with two pages : TabSheet1 & TabSheet2, TabSheet1中放入6個Tedit TabSheet2中放入2個Tedit , 那要如何計算出TabSheet1 & TabSheet2 個別放入的元件數量? 謝謝
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-22 18:12:33 IP:211.20.xxx.xxx 未訂閱
引言: 那要如何計算出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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-22 18:15:20 IP:61.222.xxx.xxx 未訂閱
您好,如下:
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-22 18:49:02 IP:210.243.xxx.xxx 未訂閱
謝謝上面的大大, 不過為何不能像form1.ComponentCount相同 直接用tabsheet1.componentCount計算出元件的數量??
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-22 19:48:29 IP:211.20.xxx.xxx 未訂閱
引言: 不過為何不能像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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-22 20:51:28 IP:218.32.xxx.xxx 未訂閱
插個花, 請別介意, 應該是 ControlCount 吧. ComponentCount 須從 owner (很可能是 TForm)去取得元件數, 問題是...還要 區分出 Parent 是 TTabSheet 的子元件.
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-22 20:59:33 IP:211.20.xxx.xxx 未訂閱
引言: 插個花, 請別介意, 應該是 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-22 21:21:35 IP:61.229.xxx.xxx 未訂閱
引言: 謝謝上面的大大, 不過為何不能像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)
系統時間:2024-05-17 16:25:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!