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

如何控制元件裡面的元件

尚未結案
dino
一般會員


發表:20
回覆:73
積分:23
註冊:2002-07-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-04 03:24:08 IP:61.219.xxx.xxx 未訂閱
請問各位高手: 程式中使用了好幾個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-04 08:12:02 IP:202.39.xxx.xxx 未訂閱
放在 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-04 08:19:06 IP:218.170.xxx.xxx 未訂閱
    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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-05 00:20:39 IP:61.219.xxx.xxx 未訂閱
感謝hagar 跟 hahalin兩位前輩的回答,我已了解了 我在想是否有更精簡的寫法 比如說我的PageControl上面有5個TabSheet 那是否就是要從TabSheet1到TabSheet5 一一去清除 那就是說要寫五次囉? 是否有更快的寫法呢?
hagar
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-05 08:03:16 IP:202.39.xxx.xxx 未訂閱
傳入參數為要 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-05 08:41:31 IP:218.170.xxx.xxx 未訂閱
我在回答 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=60830 這一題的時候有作個小小的範例 http://delphi.ktop.com.tw/loadfile.php?TOPICID=19049193&CC=426027 可以參考看看
dino
一般會員


發表:20
回覆:73
積分:23
註冊:2002-07-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-06 11:18:39 IP:61.219.xxx.xxx 未訂閱
再次感謝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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-06 12:05:38 IP:218.170.xxx.xxx 未訂閱
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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-06 13:29:36 IP:61.219.xxx.xxx 未訂閱
感謝hahalin前輩那麼快就給我答覆 現在知道哪裡錯了, 現在程式已經ok 其實TTabSheet底下還有其他各式各樣的輸入元件也需要作同樣的動作 我會自已嘗試著去寫看看的 若有問題再請教各位先進^^
系統時間:2024-05-17 10:20:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!