getallen overzetten van ene naar andere Form

Status
Niet open voor verdere reacties.

Robbert1978

Terugkerende gebruiker
Lid geworden
2 nov 2002
Berichten
2.349
Ik ben bezig met een rekenprogramma in Visual Basic. Alles lukt aardig, alleen nu ben ik bezig met een toets die je kunt maken in dat programma. Je krijgt een som, dan kun je in een textbox het antwoord geven en zogauw er iets in die tekstbox staat kun je op volgende klikken voor het volgende antwoord.

Nu wil ik dat als je op volgende klikt dat hij dan het antwoord doorstuurt naar een nieuwe Form, genaamd Uitslag. Ik heb hier de volgende formule voor:

Form15.txtUitslag2.Text = txtAntwoord1.Text

Dit verplaatst dus de text die is ingevuld in txtAntwoord1 naar txtUitslag2 in Form15

Het probleem is nu dat je als je op volgende klikt weer een nieuwe som krijgt en het antwoord weer moet geven in txtAntwoord1 en hij het daarna weer opslaat in txtUitslag1, maar ik wil dus dat hij het dan weer opslaat in een andere Textbox. Ik heb wel zogauw je op volgende klikt dat onderaan in een textbox (txtVraag)bv bij vraag 1 een 1 staat en bij vraag 2 een 2. Ik dacht dus dan is het simpel, gewoon If txtVraag.Text = 1 Then
txtAntwoord1 naar txtUitslag1 in Form15 en dan bij If vraag is 2 Then txtAntwoord1 naar txtUitslag2 in Form15 maar dat werkt dus niet

Hoe moet ik dit oplossen?

Beetje lang verhaal, maargoed ik hoop dat jullie het snappen
 
Hopelijk een niet al te lange uitleg.

Hallo Robbert,

Copieer de code hieronder en run het programma. Maak de in
totaal 3 optelsommen af. Hierna stop je het programma en
bestudeer je vervolgens de code en met name in de Select Case/End Select constructie, want hier zit de oplossing voor je probleem.
kom je hier niet uit dan hoor ik het wel.

Een aantal opmerkingen:

1) Het gaat hier voornamelijk om de kern van je probleem,
Want daar gaat het tenslotte om, en (nog) niet om de
mooiheid v.h. programma. Zo moet bijv. voor het steeds
opmaken v.h.label het label later in een procedure(routine)
worden geplaatst. En het weer opschonen van de Textboxen,
bv. txtAntwoord1 = "". Dit is dus voor de netheid v.h. programma,
maar dit komt later wel. (ik zie ergens in dit Forum, dat je een programmeertaal wilt gaan leren, vandaar)

2) In je programma heb je een Textbox met de naam "txtVraag".
Dit is niet per sé nodig. Je had dit waarschijnlijk
gebruikt in de hoop het door jou ondervonden probleem te
kunnen oplossen. Maar dit is eerder overbodig. Ik heb
daarvoor in de plaats gewoon een label gebruikt. Dit label
heeft ook de functie om de linker- en rechterterm op het
scherm te tonen. Maar hoe dan ook ben jij diegene die
bepaalt hoet de interface van je prog. er moet uitzien.

3) verder bemerk ik dat de namen die je aan de Txtbox controls
toekent wat beter (logischer) had gekund. txtAntwoord1
betekent, dat er ook een txtAntwoord2 zou moeten zijn. Dit is in jouw
prog. niet het geval, dus beter de naam txtAntwoord gebruiken.
Het gebruik v.e. array voor txtUitslag had ook gekund.

4) Tot slot: Plaats op Form1 een label, een txtbox en een knop.
de textbox heet txtAntwoord1 (ik heb deze naam zo gelaten). "txtAntwoord" zou beter zijn.
plaats op Form2 3 textboxen. Ze heten txtUitslag1 t/m txtUitslag3. In jouw prog. is het Form15 i.p.v. Form2. Omdat het hier om een voorbeeld programma gaat, heb ik er maar slechts 3 texboxen gebruik. Je zult ongetwijfeld meer gaan gebruiken.

Ik heb ook de random (rnd) functie gebruik om willekeurige getallen 1 t/m 10 te laten genereren. Je moet het programma wel aanpassen, als je voor dit
doel een ander aanpak neemt.

plaats onderstaande code (a t/m c) alleen in Form1. In Form2 komt er niets te staan.

a) In General Declaration
Dim TellerVraag As Integer
Dim LinkerTerm As Integer
Dim RechterTerm As Integer
'Hieronder heeft niet direct betrekking op je vraag,
'maar is voor de Message-Box bedoeld
Dim AntwoordMsgBox_Ja_Of_Nee As Integer
Dim Boodschap_MsgBox As String
Dim Ja_En_Nee_Knop_MsgBox As Integer
Dim Titel_MsgBox As String

b) code voor de knop (hier zit de oplossing)
Code:
Private Sub Command1_Click()
   Select Case TellerVraag
      Case 1
         Form2.txtUitslag1 = txtAntwoord1
      Case 2
         Form2.txtUitslag2 = txtAntwoord1
      Case 3
         Form2.txtUitslag3 = txtAntwoord1
   End Select
   If TellerVraag < 3 Then '3 moet je later aanpassen
       TellerVraag = TellerVraag + 1
       Randomize
       LinkerTerm = Int((10 * Rnd) + 1)
       RechterTerm = Int((10 * Rnd) + 1)
       Label1 = "Vraag " & TellerVraag & ":  " & LinkerTerm _
       & " + " & RechterTerm & " ="
     Else
       Boodschap_MsgBox = "Alle vragen zijn gesteld. Nog een keer?"
       Ja_En_Nee_Knop_MsgBox = vbYesNo
       Titel_MsgBox = "Optelsom"
     
       AntwoordMsgBox_Ja_Of_Nee = MsgBox(Boodschap_MsgBox, _
       Ja_En_Nee_Knop_MsgBox, Titel_MsgBox)
       If AntwoordMsgBox_Ja_Of_Nee = vbYes Then
           TellerVraag = 1
           Randomize
           LinkerTerm = Int((10 * Rnd) + 1)
           RechterTerm = Int((10 * Rnd) + 1)
           Label1 = "Vraag " & TellerVraag & ":  " & LinkerTerm _
           & " + " & RechterTerm & " ="
         Else
           End
       End If
   End If
End Sub

c) in Load_Form
Code:
Private Sub Form_Load()
   Form2.Show
   Command1.Caption = "&Volgende"
   TellerVraag = 1
   Randomize
   LinkerTerm = Int((10 * Rnd) + 1)
   RechterTerm = Int((10 * Rnd) + 1)
   Label1 = "Vraag " & TellerVraag & ":  " & LinkerTerm _
   & " + " & RechterTerm & " ="
End Sub

Succes.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan