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

如何強制關掉所有的form

答題得分者是:ccchen
kenji
一般會員


發表:32
回覆:44
積分:20
註冊:2002-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-21 01:48:32 IP:61.217.xxx.xxx 未訂閱
我現在開粉多form,如果我在form1中要開form3,把form1關了,問題是..... ★★情況一、 Form3:=Tform3.create(self); Form1.close; Form3.ShowModal; 會先form1自已先關掉,下一行就不執行了 form3就打不開了 ★★情況二、 Form3:=Tform3.create(self); Form3.ShowModal; Form1.close; 會先將form3打開,下一行就不執行了 form1就關不掉了 ★★情況三、 Form3:=Tform3.create(self); Form1.hide; Form3.ShowModal; 能開form3,也能把form1關掉(隱藏),問題是最後form3離開(close)時form1會關不掉,表面上form1是不見了,但其實只是form1被隱藏起來而已,form1並沒有被關掉,造成一定要用 Ctrl F2 強制關掉form1才關得掉... 唉...做一個系統問題真多,小女子又要麻煩各位高手囉! ^^||
hxf_wolf
一般會員


發表:7
回覆:38
積分:9
註冊:2002-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-21 08:30:06 IP:61.241.xxx.xxx 未訂閱
Form3:=Tform3.create(self); Form1.hide; Form3.ShowModal; Form1.Close; Happy Coding
------
Happy Coding
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-21 09:01:35 IP:61.219.xxx.xxx 未訂閱
Form3:=Tform3.create(self); 在form1中self表示form1, 故如上行form3之owner為form1, 因此form3不可能在離開form1單獨存在 實際上Delphi程式通常有一個mainForm, 當此mainform close時, 整個程式就結束了. 因此若你的程式中form1是mainform, 則不可任意close hxf_wolf所示, 應可解決你表面之問題, 但是吾你要的 要避免mainform close就close ap之問題可直接於 主程式(.dpr)控制 由menu上project|View Source可看到 主程式 改成如此
  Application.Initialize;
  Application.CreateForm(Tform1, form1);
  form1.showmodal;
  form1.free;
  Application.CreateForm(Tform3, form3);
  form3.showmodal;
  form3.free;
//  Application.Run;
你可以在主程式變化, 控制各form [NOTE] 其實最好還是永遠有一個mainform, 維持delphi原來之架構
markgau
一般會員


發表:4
回覆:10
積分:2
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-21 09:10:33 IP:211.23.xxx.xxx 未訂閱
引言: 我現在開粉多form,如果我在form1中要開form3,把form1關了,問題是..... ★★情況一、 Form3:=Tform3.create(self); Form1.close; Form3.ShowModal; 會先form1自已先關掉,下一行就不執行了 form3就打不開了 ★★情況二、 Form3:=Tform3.create(self); Form3.ShowModal; Form1.close; 會先將form3打開,下一行就不執行了 form1就關不掉了 ★★情況三、 Form3:=Tform3.create(self); Form1.hide; Form3.ShowModal; 能開form3,也能把form1關掉(隱藏),問題是最後form3離開(close)時form1會關不掉,表面上form1是不見了,但其實只是form1被隱藏起來而已,form1並沒有被關掉,造成一定要用 Ctrl F2 強制關掉form1才關得掉... 唉...做一個系統問題真多,小女子又要麻煩各位高手囉! ^^||
Unit1 procedure TForm1.Button1Click(Sender: TObject); begin Form3 := TForm3.Create(self); Form1.Hide; Form3.ShowModal; end; Unit3 implementation uses unit1; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin close; Form1.close; (或用application.Terminate代替) end; It's me, but it's also not me.
------
Its me, but its also not me.
kenji
一般會員


發表:32
回覆:44
積分:20
註冊:2002-08-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-21 10:36:15 IP:61.217.xxx.xxx 未訂閱
不太懂耶~~~~~能不能再說清楚點丫~~~
markgau
一般會員


發表:4
回覆:10
積分:2
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-08-21 10:59:18 IP:211.23.xxx.xxx 未訂閱
引言: 不太懂耶~~~~~能不能再說清楚點丫~~~
Form1應該是你的main form吧(看projcet -> options -> form頁籤 下有一個Main Form的ListBox),如同ccchen兄所說的,main form在delphi中是不可以隨意close的,當main form被關閉時,整個程式就會被關掉。當你把form1.close時,即代表整個程式被關掉了。 所以如果你要在fom3開啟時,不讓使用者看到form1,那麼應該是先讓form1.hide。如果你要在form3關閉時,連同整個程式一起關閉,就應該是在form3的OnButtonClose事件中加入form1.close。 It's me, but it's also not me.
------
Its me, but its also not me.
markgau
一般會員


發表:4
回覆:10
積分:2
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-08-21 11:00:13 IP:211.23.xxx.xxx 未訂閱
引言:
引言: 不太懂耶~~~~~能不能再說清楚點丫~~~
Form1應該是你的main form吧(看projcet -> options -> form頁籤 下有一個Main Form的ListBox),如同ccchen兄所說的,main form在delphi中是不可以隨意close的,當main form被關閉時,整個程式就會被關掉。當你把form1.close時,即代表整個程式被關掉了。 所以如果你要在fom3開啟時,不讓使用者看到form1,那麼應該是先讓form1.hide。如果你要在form3關閉時,連同整個程式一起關閉,就應該是在form3的OnButtonClose事件中加入form1.close。這是一般正常的做法。 It's me, but it's also not me.
It's me, but it's also not me.
------
Its me, but its also not me.
kenji
一般會員


發表:32
回覆:44
積分:20
註冊:2002-08-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-08-21 11:53:23 IP:61.217.xxx.xxx 未訂閱
可是我現在把主程式的FORM給CLOSE,他還是不會全關丫~~~ 噯喲.........
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-08-21 13:04:56 IP:211.20.xxx.xxx 未訂閱
可否將你的程式POST上來讓大家幫你debug @@~~飛翔在天際的精靈~~@@ 發表人 - andersonhsieh 於 2002/08/21 13:05:35
------
@@~~飛翔在天際的精靈~~@@
markgau
一般會員


發表:4
回覆:10
積分:2
註冊:2002-03-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-08-21 13:12:01 IP:211.23.xxx.xxx 未訂閱
引言: 可是我現在把主程式的FORM給CLOSE,他還是不會全關丫~~~ 噯喲.........
對不起!能否請你說清楚,“現在“是指哪個時間點?是在close form3的時候嗎?如果是在close form3的時候,那麼請把form1.close改成application.terminate試試。 It's me, but it's also not me.
------
Its me, but its also not me.
kenji
一般會員


發表:32
回覆:44
積分:20
註冊:2002-08-05

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-08-21 15:34:24 IP:61.217.xxx.xxx 未訂閱
procedure TForm1.FormCreate(Sender: TObject); begin if trim(DataModule1.ADOTable1['echelon_no'])<>'' then //非第一次登入 begin GroupBox1.Caption:='第 ' ReadStr ' 梯次 '; end else //第一次登入 begin close; showmessage('第一次登入,請先輸入梯次編號'); Form2:=Tform2.create(self); Form2.ShowModal; end; end; procedure TForm2.dxButton1Click(Sender: TObject);//新增梯次編號確定鈕 begin if MaskEdit1.Text=' - ' then showmessage('請輸入梯次編號') else begin DataModule1.ADOTable1.Edit; DataModule1.ADOTable1['echelon_no']:=MaskEdit1.Text; DataModule1.ADOTable1.Post; showmessage('新增梯次編號成功'); Form1:=Tform1.create(self); MaskEdit1.Clear; Form1:=Tform1.create(self); Form2.Hide; close; Form1.ShowModal; end; end;
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-08-21 20:01:32 IP:203.217.xxx.xxx 未訂閱
這程式完全不對, 應po完整程式比較能了解你的意圖 假設你的須求如下: 1. Form1 為mainform 2. Form1 Create 中,若發現無梯次編號則展開form2供輸入,輸入完成回到form1 3. 未交代若在form2放棄輸入. 4. 假設form2上多一個button--"Cancel", user可放棄,且放棄時結束整個程式 可如下修改    
procedure TForm1.FormCreate(Sender: TObject);
begin
  if trim(DataModule1.ADOTable1['echelon_no'])<>'' then //非第一次登入
  begin
    GroupBox1.Caption:='第 ' ReadStr ' 梯次 ';
  end
  else //第一次登入
  begin
    close;
    showmessage('第一次登入,請先輸入梯次編號');
    Form2:=Tform2.create(self);//此處create form2且parent為form1        try
      if Form2.ShowModal=mrCancel then //user在form2上按Cancel Button
        application.terminate;
//若完成輸入此處不須做任何動作, 讓form1正確顯示
    finally
      form2.free;
      form2:=nil;
    end;

  end;
end;    procedure TForm2.dxButton1Click(Sender: TObject);//新增梯次編號確定鈕
begin
  if MaskEdit1.Text=' - ' then
    showmessage('請輸入梯次編號')
  else begin
    DataModule1.ADOTable1.Edit;
    DataModule1.ADOTable1['echelon_no']:=MaskEdit1.Text;
    DataModule1.ADOTable1.Post;
    showmessage('新增梯次編號成功');
    MaskEdit1.Clear;
    ModalResult:=mrOK;  //這會使form2 close並傳回mrOK    //    Form1:=Tform1.create(self); create form1 owner為form2,不對
//    Form2.Hide;
//    close;
//    Form1.ShowModal;

  end;
end;    procedure TForm2.CancelButton1Click(Sender: TObject);//User放棄輸入begin
  ModalResult:=mrCancel; //這會使form2 close並傳回mrCancel
end;    
kenji
一般會員


發表:32
回覆:44
積分:20
註冊:2002-08-05

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-08-23 15:01:44 IP:61.217.xxx.xxx 未訂閱
謝謝大家熱心的幫我解答,這個部份我已沒問題了!^^y
系統時間:2024-05-06 4:51:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!