Toon posts:

[VB] Form als functie gebruiken ??

Pagina: 1
Acties:

Verwijderd

Topicstarter
Is het mogelijk om een form als functie aan te roepen.

Mijn bedoeling is om een form met keuzes te tonen. Nadat de gebruiker zijn keuze heeft gemaakt, drukt hij op OK. Ik wil dan de keuze kunnen lezen als integer waarde.

Eigenlijk iets vergelijkbaar met MsgBox

RetVal = Msgbox("Hallo",vbOkCancel)

RetVal = Vb_OK
of = Vb_Cancel

Maar dan

RetVal = MyForm()

Retval => 25

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:33

mulder

ik spuug op het trottoir

Kort en bondig: nee.

Je kunt bv wel een functie maken die je form show, unload en waarde terug geeft.

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Oh Ja!

Hoe dan.

Ik kan dan nog steeds de gekozen waarde in het form niet terug geven.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:33

mulder

ik spuug op het trottoir

Nou eeuh, alle wegen leiden naar Rome, wat heb je al voor code dan?

oogjes open, snaveltjes dicht


  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

Ja het is wel 'mogelijk'...

Maak in je form een public Function, dus zoiets:
code:
1
2
3
4
5
Public Function ShowME() as String
    me.show ' op deze form zit dus een textbox genaam text1

    ShowMe = text1.text
End Function

en dan maak je bijvoorbeeld een OK en Cancel knop waarin je simpelweg doet
code:
1
Me.Hide ' ipv unload me

Dat is zo ongeveer het principe, maar het is niet netjes omdat bijvoorbeeld je allerlei 'hacks' moet gebruiken om te kijken of er bijv geannuleerd is etc.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:33

mulder

ik spuug op het trottoir

Hoeft helemaal niet moeilijk, geen 'hacks':
code:
1
2
3
4
5
6
7
8
9
10
Function MyFormFunction() As Integer
Dim iResult As Integer

   Load MyFrom
   MyForm.Show vbModal
   iResult =  MyForm.Result
   Unload MyFrom

   MyFormFunction= iResult  
End Function

Result op MyForm default0, en dan bv code button Ok op MyForm:
code:
1
2
3
4
Private Sub btnOk_Click()
  Result = 1
  Hide Me
End Sub

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Allemaal hartelijk dank voor jullie reacties.

IK BEN ER UIT!!!

De fout die ik maakte was

form.show modal
en moest zijn
form.show vbModal

Dat zag ik in de laatste post van Don Facundo

Hierdoor ging mijn code fout
------------------------------------------
Dim lvobjZoekForm as new Zoekform

lvobjZoekform.show vbmodal

{In form waarde toekennen aan retval}
{Form bij verlaten slechts HIDE}

RetVal = lvobjZoekform.Retval

unload lvobjZoekForm
------------------------------------------
Nogmaals Bedankt

Verwijderd

Op maandag 18 februari 2002 16:05 schreef KingLois het volgende:
Allemaal hartelijk dank voor jullie reacties.

IK BEN ER UIT!!!

De fout die ik maakte was

form.show modal
en moest zijn
form.show vbModal

Dat zag ik in de laatste post van Don Facundo

Hierdoor ging mijn code fout
------------------------------------------
Dim lvobjZoekForm as new Zoekform

lvobjZoekform.show vbmodal

{In form waarde toekennen aan retval}
{Form bij verlaten slechts HIDE}

RetVal = lvobjZoekform.Retval

unload lvobjZoekForm
------------------------------------------
Nogmaals Bedankt
Gebruik Option Explicit, dan maak je niet zulke fouten.

  • drZymo
  • Registratie: Augustus 2000
  • Laatst online: 09-08 22:22
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 :P :
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 :P ): 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.

"There are three stages in scientific discovery: first, people deny that it is true; then they deny that it is important; finally they credit the wrong person."

Pagina: 1