[VB6] Wachten op user-input

Pagina: 1
Acties:

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
"Wachten op user-input"...

Wat ik hiermee bedoel is het volgende,

Ik probeer een "pop-up boxje" te maken die op verschillende manieren, in verschillende routines, aangeroepen kan worden met verschillende parameters dus. Hier is een form voor, en op dat form zijn verschillende mogelijkheden wat betreft de boodschap, aantal tekstvelden en titel van de form.

Dit is de bedoeling:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'Roep box:
VarUitBox = Box("Title here", "Message", 2)

Public Function Box(boxTitle As string, boxMessage As String, boxInputMethod As Integer) As String
  Box.Visible = True
  Box.Caption = boxTitle
  Box.lblMessage.Caption = boxMessage

  Select Case boxInputMethod
    Case 0
      Box.ShowDefaultFields
    Case 1
      Box.ShowAdminFields
    Case 2
      Box.ShowVIPFields
  End Select

  'wacht tot er op OK geklikt is
  Box = UserInput
  Unload Box
End Function


Dit is niet de werkelijke code, maar het idee zeg maar...
Het probleem is eigenlijk, hoe kan ik wachten tot er op OK is geklikt?
Of moet ik echt weer een andere routine oproepen als er op OK is geklikt?
Het liefst zou ik de routine willen pauzeren en verder laten gaan als er op OK is geklikt (in de box).
Als de user op OK heeft geklikt wordt de input gevalideerd, en eventueel opgeslagen (indien meerdere tekstvelden) als waarde1|waarde2|waarde3 enz., in de box nog.
Maar waar moet die waarde dan heen? Ik zou hem naar box willen sturen... Zodat ik blabla = Box(blabla,blabla,2) kan doen bijvoorbeeld. Het is denk ik gewoon een stukje logica, die ik op dit moment ff kwijt ben :P

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 03-05 20:49

Creepy

Tactical Espionage Splatterer

Maak er een modal window van?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

ten eerste je functie EN je window heten allebei box, dat zal problemen geven.

Verder over je probleem, verwijder de regel "box.visible = true" en zet net voor de regel "box=userinput" een regel "box.show vbmodal"

[edit]Oh ja, niet vergeten je "boz" window niet te sluiten, maar te hiden in de onCloseQuery event. (= close cancellen en form hiden)

[ Voor 29% gewijzigd door Verwijderd op 01-08-2005 14:04 ]


  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
Verwijderd schreef op maandag 01 augustus 2005 @ 14:03:
ten eerste je functie EN je window heten allebei box, dat zal problemen geven.

Verder over je probleem, verwijder de regel "box.visible = true" en zet net voor de regel "box=userinput" een regel "box.show vbmodal"
Ok, tot zover duidelijk. Zoals ik al zei, dit is niet mijn werkelijke code, uiteraard heet mijn routine anders dan mijn form ;) Dat Box.Show vbModal begrijp ik, maar hoe sluis ik die waarde door naar de routine?? Wat moet er gebeuren als er op OK geklikt wordt?

Edit: Dat onCloseQuery ben ik niet echt bekend mee nog.... Wat moet ik mij hierbij bij voorstellen? Ik zal ondertussen wel wat zoeken erover op mr. Google..

[ Voor 15% gewijzigd door Ciqniz op 01-08-2005 14:21 ]


Verwijderd

even alles op een rijtje ;
VB maakt zodra je ook maar een functie of property van een form aanspreekt de form variabele aan, maar toont het scherm nog niet ! Dit kun je gebruiken om paramters naar je form door te sluiten

klein voorbeeld

form
Visual Basic:
1
2
3
4
5
6
7
8
9
10
public sub OpenForm ( Parameter as string )
  ' doe hier iets met je parameter
  me.show vbmodal ' toont het form
end sub

' De volgende sub is een standaard form event
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Cancel = 1 ' Annuleer het sluiten van het form
  Me.Hide ' Verbergt het form, heeft bij een modal form tot gevolg dat de aanroepende code weer doorgaat !
End Sub


je aanroepende code :
Visual Basic:
1
2
3
boxform.openform("dit is je parameter") ' Zet parameter, en opent het form modal
' Lees hier properties etc etc van het form uit.
unload boxform ' Form was alleen maar verborgen, nu werkelijk afsluiten


Het gekke is dus dat je het form zelf ervoor laat zorgen dat ie geopend wordt !

voor wat betreft je "ok" button, daarin Hide je het form, komt ie vanzelf terug in de aanroepende code

[ Voor 13% gewijzigd door Verwijderd op 01-08-2005 14:42 ]


  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
Verwijderd schreef op maandag 01 augustus 2005 @ 14:41:
even alles op een rijtje ;
VB maakt zodra je ook maar een functie of property van een form aanspreekt de form variabele aan, maar toont het scherm nog niet ! Dit kun je gebruiken om paramters naar je form door te sluiten

klein voorbeeld

form
Visual Basic:
1
2
3
4
5
6
7
8
9
10
public sub OpenForm ( Parameter as string )
  ' doe hier iets met je parameter
  me.show vbmodal ' toont het form
end sub

' De volgende sub is een standaard form event
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Cancel = 1 ' Annuleer het sluiten van het form
  Me.Hide ' Verbergt het form, heeft bij een modal form tot gevolg dat de aanroepende code weer doorgaat !
End Sub


je aanroepende code :
Visual Basic:
1
2
3
boxform.openform("dit is je parameter") ' Zet parameter, en opent het form modal
' Lees hier properties etc etc van het form uit.
unload boxform ' Form was alleen maar verborgen, nu werkelijk afsluiten


Het gekke is dus dat je het form zelf ervoor laat zorgen dat ie geopend wordt !

voor wat betreft je "ok" button, daarin Hide je het form, komt ie vanzelf terug in de aanroepende code
Ik snap het idee! Tx _/-\o_

Verwijderd

Je zult mijn voorbeeldcode nog wel enigzins moeten tweaken, heb het meeste zo uitmijn blote hoofd ingetikt. Maar het geeft wel het globale idee aan.

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
Verwijderd schreef op maandag 01 augustus 2005 @ 15:09:
[...]

Je zult mijn voorbeeldcode nog wel enigzins moeten tweaken, heb het meeste zo uitmijn blote hoofd ingetikt. Maar het geeft wel het globale idee aan.
Dat is geen probleem, het ging mij niet om de code, maar om de logica ;)

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
En ik zal hier even mijn oplossing neerzetten (niet mijn uiteindelijke code, wel werkend!!)
Hopelijk heeft iemand er nog wat aan.

Declareer variabelen in main-form (frmMain):
Visual Basic:
1
2
3
  Public puiBodyMessage As String
  Public pUserInput     As String
  Public puiTitle       As String


Routine "UserInput":
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Function UserInput(uiTitle As String, uiBodyMessage As String) As String
  If uiBodyMessage = "" Then Exit Function                              'geen tekst? niks doen!
  If uiTitle = "" Then puiTitle = "User input:" Else puiTitle = uiTitle 'geen titel? bedenk er een!

  puiBodyMessage = uiBodyMessage 'zet tekst in var
  frmUserInput.Show vbModal      'laat frmUserInput zien als modal form

  'Pauze!
  'wacht tot de input OK is in het volgende blokje code, en ga dan hier weer verder:

  Unload frmUserInput    'klaar? laat hem weer verdwijnen
  UserInput = pUserInput 'pak user input op uit de publieke var en laat het de routine retourneren
End Function


Form "frmUserInput":
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
'tijdens het form-load event passen we de form-caption en (body)label-caption even aan:
Private Sub Form_Load()
  Me.Caption = frmMain.puiTitle
  lblMessage.Caption = frmMain.puiBodyMessage
End Sub

'als er op de knop OK geklikt wordt, voeren we het volgende uit:
Private Sub cmdOk_Click()
  If txtUserInput.Text = "" Then Exit Sub
  frmMain.pUserInput = txtUserInput.Text
  Unload me
End Sub

'nadat de input "gevalideerd" is en correct was nadat de user op ok heeft geklikt
'wordt de form ge-unload
'in dat geval wordt het volgende event aangeroepen
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Cancel = 1 'annuleer het afsluiten
  Me.Hide    'verberg form
End Sub


Zo werkt het in ieder geval bij mij zoals ik het wou! Nu alleen nog verder uitbreiden natuurlijk ;)

[ Voor 7% gewijzigd door Ciqniz op 02-08-2005 09:08 ]


Verwijderd

Niet helemaal zoals ik uitgelegd had ( ik had je UserInput routine onderdeel gemaakt van frmUserInput ), maar als het werkt...
Pagina: 1