關於 MDI 相同 Form 重複開啟,再逐一關閉時的錯誤問題. |
答題得分者是:eaglewolf
|
ssbbs
一般會員 ![]() ![]() 發表:3 回覆:10 積分:2 註冊:2008-01-21 發送簡訊給我 |
請問一下,在下設計兩個 Form, 一個主 Form1 -> MDI, 一個 子 Form2 -> MDIChild
我查遍網站所有關於 MDI 文章,都只提到要避免相同 MDIChild Form 的重複開啟, 可是,在下要設計的卻偏偏是相同 MDIChild Form 可以重複開啟的程式, 在執行階段點出相同 Form2 兩次, 然後關閉第一個 Form2, 沒有問題, 再關閉第二個 Form2 時,就會出現問題. 請問這樣子有解嗎? 我測試結果,應該是 Form2 在第一次關閉時被 Free 了, 所以關閉第二次 Form2 時才造成記憶體上得差錯吧? |
eaglewolf
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
不知道您的問題點在哪
以下的程式可以正常的 開啟/關閉多個MDIChild Form [code delphi] { Unit1.pas} procedure TForm1.N11Click(Sender:TObject) begin Form2 := TForm2.Create(Form1); Form2.Show; end; {Unit2.pas} procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; [/code] ===================引 用 ssbbs 文 章=================== 請問一下,在下設計兩個 Form, 一個主 Form1 -> MDI, 一個 子 Form2 -> MDIChild 我查遍網站所有關於 MDI 文章,都只提到要避免相同 MDIChild Form 的重複開啟, 可是,在下要設計的卻偏偏是相同 MDIChild Form 可以重複開啟的程式, 在執行階段點出相同 Form2 兩次, 然後關閉第一個 Form2, 沒有問題, 再關閉第二個 Form2 時,就會出現問題. 請問這樣子有解嗎? 我測試結果,應該是 Form2 在第一次關閉時被 Free 了, 所以關閉第二次 Form2 時才造成記憶體上得差錯吧?
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
ssbbs
一般會員 ![]() ![]() 發表:3 回覆:10 積分:2 註冊:2008-01-21 發送簡訊給我 |
在下 MDI form 的程式碼為:
var frmMain : TfrmMain; implementation uses cut; procedure TfrmMain.Csutomer1Click(Sender: TObject); begin frmCut := TfrmCut.Create(frmMain); frmCut.Show; end; MDIChild 程式碼如下: var frmCut: TfrmCut; implementation procedure TfrmCut.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; frmCut := NIL; end; procedure TfrmCut.ToolButton5Click(Sender: TObject); begin frmCut.Close; end; 這個 MDIChild -> frmCut 連續開兩次, 關閉第一次開啟的沒問題, 關閉第二次開啟的就會出現如下訊息: ![]() |
pceyes
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
===================引 用 ssbbs 文 章=================== 在下 MDI form 的程式碼為: var frmMain : TfrmMain; implementation uses cut; procedure TfrmMain.Csutomer1Click(Sender: TObject); begin frmCut := TfrmCut.Create(frmMain); frmCut.Show; end; MDIChild 程式碼如下: var frmCut: TfrmCut; implementation procedure TfrmCut.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; frmCut := NIL; {這行拿掉可以嗎} end; procedure TfrmCut.ToolButton5Click(Sender: TObject); begin frmCut.Close; end; 這個 MDIChild -> frmCut 連續開兩次, 關閉第一次開啟的沒問題, 關閉第二次開啟的就會出現如下訊息: ![]()
------
努力會更接近成功 |
ssbbs
一般會員 ![]() ![]() 發表:3 回覆:10 積分:2 註冊:2008-01-21 發送簡訊給我 |
|
syntax
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
問題在你建立的 TfrmMain ,上面的都西,有程式上的邏輯錯誤
===================引 用 ssbbs 文 章=================== 在下 MDI form 的程式碼為: var frmMain : TfrmMain; implementation uses cut; procedure TfrmMain.Csutomer1Click(Sender: TObject); begin frmCut := TfrmCut.Create(frmMain); frmCut.Show; end; MDIChild 程式碼如下: var frmCut: TfrmCut; implementation procedure TfrmCut.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; frmCut := NIL; end; procedure TfrmCut.ToolButton5Click(Sender: TObject); begin frmCut.Close; end; 這個 MDIChild -> frmCut 連續開兩次, 關閉第一次開啟的沒問題, 關閉第二次開啟的就會出現如下訊息: ![]() |
ssbbs
一般會員 ![]() ![]() 發表:3 回覆:10 積分:2 註冊:2008-01-21 發送簡訊給我 |
我附上這兩支單元的 source, 可否請你幫忙看一下是哪裡錯誤了?
www4.zzz.com.tw/dkdl.rar ===================引 用 syntax 文 章=================== 問題在你建立的 TfrmMain ,上面的都西,有程式上的邏輯錯誤 |
ssbbs
一般會員 ![]() ![]() 發表:3 回覆:10 積分:2 註冊:2008-01-21 發送簡訊給我 |
|
yorkland
高階會員 ![]() ![]() ![]() ![]() 發表:2 回覆:138 積分:108 註冊:2004-12-17 發送簡訊給我 |
The following codes are just for your reference.
既然要設成自動釋放(caFree), 可以with的方式避開變數的設定, 如此一來, 開幾個Child Form都沒有問題。 [code delphi] procedure TfrmMain.Csutomer1Click(Sender: TObject); begin with TfrmCut.Create(Owner) do begin // 如果需要做Child form的設定, 則寫在這裡... Show; end; end; MDIChild 程式碼如下: procedure TfrmCut.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; [/code] |
ssbbs
一般會員 ![]() ![]() 發表:3 回覆:10 積分:2 註冊:2008-01-21 發送簡訊給我 |
|
sryang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |