johnwoo wilde dit posten alleen zijn connectie is een beetje brak dus moet ik het maar ff posten. Ok het is mischien al een beetje overbodig maar hij wilde niet voor niets een kwartier getikt hebben

:
Op maandag 18 februari 2002 14:51 schreef Don Facundo het volgende:
Kort en bondig: nee.
Je kunt bv wel een functie maken die je form show, unload en waarde terug geeft.
Nog korter (een letter

): ja
Ergens in een willekeurige module zet je de functie die je wilt aanroepen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| Public Function MyMsgBox(ByVal Text As String) As Integer
MyMsgBox = 0 ' Default waarde.
Load frmMsgBox
frmMsgBox.lblPrompt.Caption = Text
' Eventueel nog een zootje andere variabelen doorpassen aan het form
frmMsgBox.Show vbModal
' Door geen owner form op te geven wordt de form
' 'application modal', ofwel geen enkel ander normaal form
' in de app kan actief worden voordat deze form weg is.
' Als we hier komen is de form weg... Dan gaan we
' kijken wat er allemaal gebeurd is in de tussentijd.
If frmMsgBox.ValidResult Then
' ValidResult zet je in de form alleen op True als er
' op OK is geklikt.
MyMsgBox = frmMsgBox.ResultValue
End If
' Formpje weer netjes opruimen:
Unload frmMsgBox
End Function |
In de frmMsgBox houd je dan die twee variabelen bij, en Hide je de form als ergens op geklikt wordt (of de form wordt ge-unload)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| Option Explicit
Public ValidResult As Boolean
Public ResultValue As Integer
Private Sub Form_Load()
ValidResult = False
ResultValue = 0
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then ' Op kruisje geklikt
Cancel = True
Me.Hide
End If
End Sub
Private Sub cmdOK_Click()
ResultValue = [Whatever je maar wil]
ValidResult = True
Me.Hide
End Sub |
Op deze manier doe ik het meestal, en dat werkt als n trein

De thread die de MyMsgBox function uitvoert blijft na de "frmMsgBox.Show vbModal" call hangen totdat de form weer weg is. Zou je dat vbModal er niet bij zetten, dan gaat de thread gewoon door na het zichtbaar maken van de form.