2014-09-30 30 views
0

我以前問過這個問題,但我不能清楚,因爲答案證明,根據我可以告訴不正確..所以這裏再次。VB6當關閉父窗體時,請卸載queryunload或終止事件在子窗體中觸發

我有一個VB6應用程序。它有它開創了(我不認爲不MDI)窗體和對話框

我想保存的任何打開的窗體或對話框的應用程序關閉時的位置主菜單所以下次打開應用程序時,職位將被恢復。

我希望當我關閉應用程序時,任何一個queryUnload,unload,terminate都會在'child'窗口或對話框中觸發,我可以保存它們的位置..但似乎沒有任何東西可以觸發。

我已經在所有上述事件中設置了斷點,但是當我關閉應用程序時,沒有任何事情會發生。

VB6是不是我平時的演出..所以我可能想得太多了.NET ..

有沒有辦法這可以在VB6做..

編輯:如此看來,如果我點擊右上角的關閉十字,我「結束」了應用程序。有沒有辦法在VB6中編輯這種行爲,以便我可以煽動一個優雅的關閉?

+1

你怎麼關閉應用程序?你是否在任何地方使用「結束」? – Hrqls 2014-09-30 06:02:35

+0

保存窗口位置時,請記住您還需要保存窗體是最大化,最小化還是正常。只有在正常情況下才能保存位置。這可能會很棘手。我通常將值保存在resize事件中而不是關閉時,以確保獲得「良好」值。 – 2014-10-02 15:16:52

+0

呃..「End」..是Hrqls通過單擊MDI父項的方式。在我的語言中,右上角是標準的關閉十字。在這種情況下,我必須這樣做..這就是爲什麼我沒有得到任何事件發射。 – snark 2014-10-03 03:12:31

回答

1

所有3個事件都會觸發,但Terminate事件在您期望時可能不會被觸發。

創建一個由1種MDI形式,1個MDI子窗體,1個範式的測試項目,並添加以下代碼:

MDI形式:

'MDI form : name=MDIForm1 

Option Explicit 

Private Sub MDIForm_Click() 
    End 
End Sub 

Private Sub MDIForm_Load() 
    Form1.Show 
    Form2.Show vbModeless, Me 
    WindowState = vbMaximized 
End Sub 

Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer) 
    MsgBox "MDI form QueryUnload event" 
End Sub 

Private Sub MDIForm_Terminate() 
    MsgBox "MDI form Terminate event" 
End Sub 

Private Sub MDIForm_Unload(Cancel As Integer) 
    MsgBox "MDI form Unload event" 
End Sub 

MDI子:

'1 form: name=Form1 MDIChild=true 

Option Explicit 

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 
    MsgBox "MDI child QueryUnload event" 
End Sub 

Private Sub Form_Terminate() 
    MsgBox "MDI child Terminate event" 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 
    MsgBox "MDI child Unload event" 
End Sub 

正常形式:

'1 form: name=Form2 

Option Explicit 

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 
    MsgBox "Form2 QueryUnload event" 
End Sub 

Private Sub Form_Terminate() 
    MsgBox "Form2 Terminate event" 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 
    MsgBox "Form2 Unload event" 
End Sub 

您將看到QueryUnload和Unload事件被觸發(按此順序),但是當您關閉MDI表單時觸發Terminate事件。

當您單擊MDI窗體的背景,然後End將被調用,任何情況下,被解僱

1

「孩子」的形式做得到平常事件。請注意,在Form_QueryUnload上的UnloadMode參數是vbFormOwner

「孩子」的形式,只顯示explcit所有者的形式是這樣的:

'--- using global references 
Form2.Show vbModal, Form1 
Form3.Show , Form1 '--- Form3 is modeless 

'--- using instances 
With New Form2 
    .Show vbModal, oOwnerForm 
End With 
With New Form3 
    .Show , oOwnerForm 
End With 
相關問題