MDIform 与 MDIchild 之間的控制 |
答題得分者是:channel
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 請問如何在MDI Form与MDIChild 的系統中﹐控制MDIChild Form的出現﹐小弟剛開啟MDIForm﹐其中的一個MDIChild Form也就跟著自動開啟了﹐請問該如何設定使其不自動開啟﹒Delphi/Project/Options 將MDIChild Form從Auto create-forms移到Available forms思意是從自動到手動 開啟MDIChild Form的方法: 假設要開啟Form2則: if not Assigned(Form2) then Form2 := TForm2.Create(Self); Form2.Show; 引言: 關閉MDIChild Form的語法該如何寫﹐若使用Close只可將其最小化于MDI Form之中﹒﹒﹒請各位前輩指點﹒ procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := CaFree; end;~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
請問前輩﹒ if not Assigned(Form2) //為何意義﹖ 小弟另寫了這樣一段程式碼作為開啟MDIChild Form之用﹕ procedure TMain.N13Click(Sender: TObject);
var
PasswordChange :TPasswordChange;
begin
PasswordChange := TPasswordChange.Create(Application);
PasswordChange.Show;
end; 也可正常開啟﹐請問哪一種方法比較好﹒
謝謝Channel前輩的指點﹒ 努力,相信會獲得美麗!
忻晟
------
忻晟 |
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 請問前輩﹒ if not Assigned(Form2) //為何意義﹖ 小弟另寫了這樣一段程式碼作為開啟MDIChild Form之用﹕ procedure TMain.N13Click(Sender: TObject); var PasswordChange :TPasswordChange; begin PasswordChange := TPasswordChange.Create(Application); PasswordChange.Show; end; 也可正常開啟﹐請問哪一種方法比較好﹒ 謝謝Channel前輩的指點﹒ 努力,相信會獲得美麗! 忻晟if not Assigned(Form2)是在判斷是否分配Mem給Form2,也就是判斷Form2是否已經開啟了。 如果您沒有加這一行的話Form2會被重複開啟 您試一下按兩N13Click,以您的寫法PasswordChange會被開啟兩次 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 果然如前輩所述﹐用if not Assigned(PasswordChange)就不會重复開啟這個MDIChild Form了﹒謝謝指點﹗ 但小弟發現另外一個現象﹐就是將開啟的PasswordChange關閉后﹐再去點擊開啟PasswordChange的MainN13按鍵就沒有任何效果了﹐PasswordChange也不會被開啟﹐請問該如何解決﹖ 不甚感謝﹗ 努力,相信會獲得美麗! 忻晟 procedure TMain.N13Click(Sender: TObject); 您又宣告一個Local的PasswordChange基本上已經uses TPasswordChange這個unit 就不能再宣告一個Local的變數,因為PasswordChange已經宣告在TPasswordChange這個unit裏面 //var //PasswordChange :TPasswordChange; begin if not Assinged(PasswordChange) then PasswordChange := TPasswordChange.Create(Application); PasswordChange.Show; end;另外,小弟忘了還要在MDIChild加一段程式: procedure TPasswordChange.FormDestroy(Sender: TObject); begin PasswordChange := nil;//釋放Mem end;這樣應該就沒有問題了 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 感恩了﹐Channel前輩﹐問題已解決﹗ 再加問一句﹐PasswordChange := TPasswordChange.Create(Application); 和PasswordChange := TPasswordChange.Create(Self); 有何區別﹐小弟將兩種皆試過﹐都可使用﹐不明白有何區別﹐請前輩指點﹒ 感謝﹗ 努力,相信會獲得美麗! 忻晟Create後面接的參數是指擁有者,Application是指整個應用程式是一個global variable,而Self是指所在Form本身,以您的例應該是指MainForm、呼叫者(不是指PasswordChange),兩者的差別應該是生命週期不同而已,但在您的例子中應該都是一樣的,因為MainForm離開後,應用程式也結束了。這是我的想法,若有不對,請各位Delphi高手、前輩訂正.... ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |