如何控制元件裡面的元件 |
尚未結案
|
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
請問各位高手:
程式中使用了好幾個PageControl,畫面上一次只顯示一個PageControl去作輸入
使用Visible去控制顯示與否,當某個PageControl.Visible := false時,要把
這個PageControl底下所有的TabSheet裡面的Edit所輸入的值都清除,不然下次
Visible := true時會看到上次輸入的值,還要一個一個去刪除的話是很麻煩的
目前我只會使用Edit.text='' 一個一個去把全部的text屬性都清除掉,
如果PageControl是用動態Create跟Free應該就沒有上述的問題,但是PageControl底下的元件很多,要這樣寫勢必很辛苦
問題一:Component Palette上面的元件使用Free方法釋放掉後,有辦法再Create跟Show出來嗎? (若是free之後無法再Create出來,就還是只能用visible控制)
問題二:如果問題一無解,那要如何可以像使用Form一樣,Form.Close(以PageControl來講,是visible:=false)之後,再Application.CreateForm與Show(以PageControl來講,是visible:=true)時,底下所有的元件都會初始化(也就是Edit恢復到為輸入時的狀態)呢?
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
放在 TTabSheet 上的這些 TEdit.Parent 是 TTabSheet
那可用 TTabSheet.ControlCount 與 TTabSheet.Controls 來做控制
下面的例子是把 TabSheet1 上的所有 TEdit 的 Text 清空:
var i: integer; begin for i := 0 to TabSheet1.ControlCount - 1 do begin if TabSheet1.Controls[i] is TEdit then TEdit(TabSheet1.Controls[i]).Text := ''; end; end; |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin pg1.Pages[1].TabVisible:=not pg1.Pages[1].tabVisible; if pg1.pages[1].tabVisible =true then begin for i:=0 to pg1.pages[1].ControlCount-1 do begin if pg1.Pages[1].controls[i] is tedit then tedit(pg1.pages[1].controls[i]).text:=''; end; end; end; |
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
傳入參數為要 Clear 的 TPageControl
procedure ClearPageControlEditText(APangeControl: TPageControl) var i, j: integer; tab: TTabSheet; begin for j := 0 to APageControl.PageCount - 1 do begin tab := APageControl.Pages[j]; for i := 0 to tab.ControlCount - 1 do begin if tab.Controls[i] is TEdit then TEdit(tab.Controls[i]).Text := ''; end; end; end;發表人 - hagar 於 2004/12/05 08:53:39 |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
再次感謝hagar 跟 hahalin兩位前輩的回答,我只能說我有所了解
但也只能說一知半解,原因如下:
我忘了我的每個TabSheet底下其實是有放TPanel元件的
然後裡面才是TEdit, 也就是說TEdit.Parent是TPanel
所以我想應該是再多一層迴圈就可以解決, 不過小弟實在汗顏, 邏輯能力太差了
想了老半天還是有記憶體access的錯誤 如下:
依照hagar的寫法修改:
var i, j, k: integer; tab: TTabSheet; panel : TPanel; begin for j := 0 to APageControl.PageCount - 1 do begin tab := APageControl.Pages[j]; for i := 0 to tab.ControlCount - 1 do begin if tab.Controls[i] is TPanel then begin for k := 0 to panel.ControlCount - 1 do begin if panel.Controls[k] is TEdit then TEdit(panel.Controls[k]).Text := ''; end; end; end; end; end;發表人 - dino 於 2004/12/06 11:24:00 發表人 - dino 於 2004/12/06 11:26:26 |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
var i, j, k: integer; tab: TTabSheet; panel : TPanel; begin for j := 0 to APageControl.PageCount - 1 do begin tab := APageControl.Pages[j]; for i := 0 to tab.ControlCount - 1 do begin if tab.Controls[i] is TPanel then begin panel:=tpanel(tab.controls[i]); for k := 0 to panel.ControlCount - 1 do begin if panel.Controls[k] is TEdit then TEdit(panel.Controls[k]).Text := ''; end; end; end; end; end; |
dino
一般會員 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |