Unload aller Forms

17/06/2010 - 11:06 von Lothar Geyer | Report spam
Wenn meine Anwendung beendet werden soll, schließe ich in einer Schleife
alle Forms. Das geht soweit gut bis auf den Fall, wenn in einer
Form_QueryUnload durch eine Bedingung Cancel auf 1 gesetzt wird. Dann
geht das in eine Endlosschleife. Welche Möglichkeiten gibt es, in der
Schleife mit den Unloads eine solche Situation zu erkennen? Geht das nur
über eine globale Variable, die ich im QueryUnload setzen und in der
Schleife abfragen müsste?

Lothar Geyer
 

Lesen sie die antworten

#1 Harald M. Genauck
17/06/2010 - 15:42 | Warnen spam
Hallo Lothar,

Wenn meine Anwendung beendet werden soll, schließe ich in einer
Schleife alle Forms. Das geht soweit gut bis auf den Fall, wenn in
einer Form_QueryUnload durch eine Bedingung Cancel auf 1 gesetzt
wird. Dann geht das in eine Endlosschleife. Welche Möglichkeiten
gibt es, in der Schleife mit den Unloads eine solche Situation zu
erkennen? Geht das nur über eine globale Variable, die ich im
QueryUnload setzen und in der Schleife abfragen müsste?



Du könntest die QueryUnload-Informationen sammeln - Beispiel:

(Modul ...:)

Public Sub Main()
Dim i As Integer
Dim nForm As MyForm

For i = 1 To 3
Set nForm = New MyForm
nForm.Caption = "Instanz" & CStr(i)
nForm.Show
Next
End Sub

Public Sub UnloadForms()
Dim nForm As MyForm
Dim nUnloadInfos As Collection

Set nUnloadInfos = New Collection

For Each nForm In Forms
nUnloadInfos.Add nForm.UnloadForm
Next

Dim nUnloadInfo As UnloadInfo
For Each nUnloadInfo In nUnloadInfos
If nUnloadInfo.Cancel Then
MsgBox "Cancelled:" & vbCrLf & _
CStr(nUnloadInfo.UnloadMode), vbInformation, _
nUnloadInfo.Form.Caption
End If
Next
End Sub

(Klasse UnloadInfo:)

Private mForm As MyForm

Private mCancel As Integer
Private mUnloadMode As Integer

Public Sub Init(Form As MyForm)
Set mForm = Form
End Sub

Public Sub QueryUnload(Cancel As Integer, _
UnloadMode As Integer)
mCancel = Cancel
mUnloadMode = UnloadMode
End Sub

Public Property Get Form() As MyForm
Set Form = mForm
End Property

Public Property Get Cancel() As Integer
Cancel = mCancel
End Property

Public Property Get UnloadMode() As Integer
UnloadMode = mUnloadMode
End Property

(Form MyForm:)

Private mUnloadInfo As UnloadInfo

Public Function UnloadForm() As UnloadInfo
Set mUnloadInfo = New UnloadInfo
mUnloadInfo.Init Me
Unload Me
Set UnloadForm = mUnloadInfo
End Function

Public Property Get UnloadInfo() As UnloadInfo
Set UnloadInfo = mUnloadInfo
End Property

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'...
mUnloadInfo.QueryUnload Cancel, UnloadMode
End Sub

Private Sub Command1_Click()
UnloadForms
End Sub


Viele Grüße

Harald M. Genauck

"VISUAL STUDIO one" - http://www.visualstudio1.de (Chefredakteur)
"ABOUT Visual Basic" - http://www.aboutvb.de (Hrsg. + Redaktion)

Ähnliche fragen