Weergegeven resultaten: 1 t/m 3 van 3
  1. #1
    Gevorderd   pietereeckhout's schermafbeelding
    Geregistreerd
    23 October 2005
    Locatie
    maarkedal
    Berichten
    290
    Bedankjes
    63
    Bedankt
    23 keer in 21 posts

    VB.net: public 'variable' variable

    Hello
    Ik heb volgende code:
    Code:
    
     'Instellingen: 
        'Het aantal rekenvragen in 1 test? 
        Public intAantalRekenVragenInTest As Integer = 3 
    
        'btnControle 
        Public btnControle As New Windows.Forms.Button 
    
        'btnNieuw 
        Public btnNieuw As New Windows.Forms.Button 
        Public Sub frmRekentest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
            'Declareren van variablen 
            Dim objGetal As New Random 
            Dim objBewerking As New Random 
            Dim strBewerking() As String = {"+", "-", "*"} 
    
            'Teller starten per vraag moeten er 2 getallen gegenereerd worden 
            For i As Integer = 1 To intAantalRekenVragenInTest * 2 
    
                Dim txtResultaat As New Windows.Forms.TextBox 
                Dim lblGelijkaanTeken As New Windows.Forms.Label 
                Dim lblBewerking As New Windows.Forms.Label 
                Dim lblGetal As New Windows.Forms.Label 
    
                'declareren van labels en knoppen en aanpassen 
                'lblgetal 
                'Dim lblGetal As New Windows.Forms.Label 
                lblGetal.Height = 20 
                lblGetal.Width = 20 
                lblGetal.TextAlign = ContentAlignment.MiddleCenter 
    
                'lblBewerking 
                'Dim lblBewerking As New Windows.Forms.Label 
                lblBewerking.Height = 20 
                lblBewerking.Width = 20 
                lblBewerking.TextAlign = ContentAlignment.MiddleCenter 
    
                'lblGelijkaanTeken 
                'Dim lblGelijkaanTeken As New Windows.Forms.Label 
                lblGelijkaanTeken.Height = 20 
                lblGelijkaanTeken.Width = 20 
                lblGelijkaanTeken.TextAlign = ContentAlignment.MiddleCenter
     
                'Dim txtResultaat As New Windows.Forms.TextBox 
                txtResultaat.Multiline = True 
                txtResultaat.Height = 20 
                txtResultaat.Width = 50 
    
                'Als er rest is dan onevengetal dus links 
                If i Mod 2 = 1 Then 
    
                    lblGetal.Location = New Drawing.Point(8, 8 + i * 12) 
    
                    'Als er geen rest is dan evengetal dus rechts 
                ElseIf i Mod 2 = 0 Then 
    
                    'de bewerking in het midden plaatsen 
                    lblBewerking.Location = New Drawing.Point(28, 8 + i * 12 - 12) 
                    'de bewerking word willekeurig gekozen: +,-,* 
                    lblBewerking.Text = strBewerking(objBewerking.Next(0, 3)) 
    
                    'een naam geven aan het label van de bewerking 
                    lblBewerking.Name = "lblBewerking" & (i / 2).ToString 
    
                    'het 2de getal rechts plaatsen 
                    lblGetal.Location = New Drawing.Point(48, 8 + i * 12 - 12) 
    
                    'het gelijksaanteken plaatsen 
                    lblGelijkaanTeken.Location = New Drawing.Point(68, 8 + i * 12 - 12) 
                    lblGelijkaanTeken.Text = "=" 
                    lblGelijkaanTeken.Name = "lblGelijkaanTeken" & (i / 2).ToString 
    
                    'het tekstvak plaatsen 
                    txtResultaat.Location = New Drawing.Point(88, 8 + i * 12 - 12) 
                    txtResultaat.Name = "txtResultaat" & (i / 2).ToString 
    
                End If 
    
                'de getallen willekeurig laten genereren 
                lblGetal.Text = objGetal.Next(0, 10) 
    
                'naam geven aan het label van het getal 
                lblGetal.Name = "lblGetallinks" & (i).ToString 
    
                'een knop controle plaatsen 
                btnControle.Location = New Drawing.Point(8, intAantalRekenVragenInTest * 24 + 28) 
                btnControle.TabIndex = 1 
                
                'een waarde en een naam aan de knop geven
                  btnControle.Text = "Controleer" 
                btnControle.Name = "btnControle"
    
                'een knop nieuw plaatsen 
                btnNieuw.Location = New Drawing.Point(88, intAantalRekenVragenInTest * 24 + 28) 
                btnNieuw.TabIndex = 2 
    
                'een waarde en een naam aan de knop geven 
                btnNieuw.Width = "115" 
                btnNieuw.Text = "Nieuwe getallen" 
                btnNieuw.Name = "btnNieuw" 
    
                'de gemaakte labels, knoppen en tekstvakken op het formulier plaatsen 
                'als de naam van het label,de knop of het tekstvak verschillend is van 
                '"niets" dan mag het getoond worden anders krijg je linksvanboven iets 
    
                Controls.Add(lblBewerking) 
                Controls.Add(lblGetal) 
                Controls.Add(lblGelijkaanTeken) 
    
                If txtResultaat.Name <> "" Then 
                    Controls.Add(txtResultaat) 
                End If 
    
                Controls.Add(btnControle) 
                Controls.Add(btnNieuw) 
                btnNieuw.Enabled = False 
    
                'code toewijzen aan de knop controle als er op geklikt word 
                AddHandler btnControle.Click, AddressOf Controle 
    
            Next 
        End Sub 
    
        Public Sub Controle(ByVal sender As Object, ByVal e As EventArgs) 
    
            btnNieuw.Enabled = True 
    
        End Sub
    Dit werkt. Maar nu wil ik dat ik als ik (hmmz) op de button controle klik kan controleren wat er in de tekstvakken staat.


    De labels en tekstvakken zijn variabel. Je het maar eens uitvoeren.

    Dit lukt mij maar niet.
    Laatst gewijzigd door pietereeckhout; 2 December 2007 om 11:48
    Post-It on Ivanhoejupiler Minatica

  2. #2
    Erelid/Spyware Slayer  
    Geregistreerd
    10 May 2005
    Berichten
    1.977
    Bedankjes
    119
    Bedankt
    373 keer in 248 posts
    Je maakt txtResultaat aan in een sub, daarom is hij niet op een hogere level toegankelijk.
    Variables in een functie zijn niet beschikbaar in andere functies/subs.

    Je kan werken met een array van textboxen zoals hier:

    Code:
    Public Class Form1
    
        'Instellingen: 
        'Het aantal rekenvragen in 1 test? 
        Public intAantalRekenVragenInTest As Integer = 3
        'btnControle 
        Public btnControle As New Windows.Forms.Button
        'btnNieuw 
        Public aTextFields(intAantalRekenVragenInTest) As Windows.Forms.TextBox
        Public btnNieuw As New Windows.Forms.Button
        Public Sub frmRekentest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Declareren van variablen 
            Dim objGetal As New Random
            Dim objBewerking As New Random
            Dim strBewerking() As String = {"+", "-", "*"}
            'Teller starten per vraag moeten er 2 getallen gegenereerd worden 
            For i As Integer = 1 To intAantalRekenVragenInTest * 2
                Dim lblGelijkaanTeken As New Windows.Forms.Label
                Dim lblBewerking As New Windows.Forms.Label
                Dim lblGetal As New Windows.Forms.Label
                'declareren van labels en knoppen en aanpassen 
                'lblgetal 
                'Dim lblGetal As New Windows.Forms.Label 
                lblGetal.Height = 20
                lblGetal.Width = 20
                lblGetal.TextAlign = ContentAlignment.MiddleCenter
                'lblBewerking 
                'Dim lblBewerking As New Windows.Forms.Label 
                lblBewerking.Height = 20
                lblBewerking.Width = 20
                lblBewerking.TextAlign = ContentAlignment.MiddleCenter
                'lblGelijkaanTeken 
                'Dim lblGelijkaanTeken As New Windows.Forms.Label 
                lblGelijkaanTeken.Height = 20
                lblGelijkaanTeken.Width = 20
                lblGelijkaanTeken.TextAlign = ContentAlignment.MiddleCenter
    
                'Als er rest is dan onevengetal dus links 
                If i Mod 2 = 1 Then
                    lblGetal.Location = New Drawing.Point(8, 8 + i * 12)
                    'Als er geen rest is dan evengetal dus rechts 
                ElseIf i Mod 2 = 0 Then
                    'de bewerking in het midden plaatsen 
                    lblBewerking.Location = New Drawing.Point(28, 8 + i * 12 - 12)
                    'de bewerking word willekeurig gekozen: +,-,* 
                    lblBewerking.Text = strBewerking(objBewerking.Next(0, 3))
                    'een naam geven aan het label van de bewerking 
                    lblBewerking.Name = "lblBewerking" & (i / 2).ToString
                    'het 2de getal rechts plaatsen 
                    lblGetal.Location = New Drawing.Point(48, 8 + i * 12 - 12)
                    'het gelijksaanteken plaatsen 
                    lblGelijkaanTeken.Location = New Drawing.Point(68, 8 + i * 12 - 12)
                    lblGelijkaanTeken.Text = "="
                    lblGelijkaanTeken.Name = "lblGelijkaanTeken" & (i / 2).ToString
                    'het tekstvak plaatsen
                    aTextFields(i / 2) = New Windows.Forms.TextBox
                    aTextFields(i / 2).Location = New Drawing.Point(88, 8 + i * 12 - 12)
                    aTextFields(i / 2).Name = "txtResultaat" & (i / 2).ToString
                    aTextFields(i / 2).Multiline = True
                    aTextFields(i / 2).Height = 20
                    aTextFields(i / 2).Width = 50
                    Controls.Add(aTextFields(i / 2))
                End If
                'de getallen willekeurig laten genereren 
                lblGetal.Text = objGetal.Next(0, 10)
                'naam geven aan het label van het getal 
                lblGetal.Name = "lblGetallinks" & (i).ToString
                'een knop controle plaatsen 
                btnControle.Location = New Drawing.Point(8, intAantalRekenVragenInTest * 24 + 28)
                btnControle.TabIndex = 1
                'een waarde en een naam aan de knop geven 
                btnControle.Text = "Controleer"
                btnControle.Name = "btnControle"
                'een knop nieuw plaatsen 
                btnNieuw.Location = New Drawing.Point(88, intAantalRekenVragenInTest * 24 + 28)
                btnNieuw.TabIndex = 2
                'een waarde en een naam aan de knop geven 
                btnNieuw.Width = "115"
                btnNieuw.Text = "Nieuwe getallen"
                btnNieuw.Name = "btnNieuw"
                'de gemaakte labels, knoppen en tekstvakken op het formulier plaatsen 
                'als de naam van het label,de knop of het tekstvak verschillend is van 
                '"niets" dan mag het getoond worden anders krijg je linksvanboven iets 
                Controls.Add(lblBewerking)
                Controls.Add(lblGetal)
                Controls.Add(lblGelijkaanTeken)
                Controls.Add(btnControle)
                Controls.Add(btnNieuw)
                btnNieuw.Enabled = False
                'code toewijzen aan de knop controle als er op geklikt word 
                AddHandler btnControle.Click, AddressOf Controle
            Next
        End Sub
        Public Sub Controle(ByVal sender As Object, ByVal e As EventArgs)
            btnNieuw.Enabled = True
            Dim i As Integer
    
            For i = 1 To aTextFields.GetUpperBound(0)
                MessageBox.Show("Resultaat opgaven " & CStr(i) & " = " & aTextFields(i).Text)
            Next
        End Sub
    End Class
    Het enige probleem met je programma is dat Controle 6 keer word aangeroepen bij 1 klik.
    Je code is ook vrij onoverzichtelijk, alles staat vlak onder elkaar, probeer eens wat witregels toe te voegen.

  3. De volgende gebruiker bedankt Martijnc voor deze nuttige post:

    pietereeckhout ( 2 December 2007)

  4. #3
    Gevorderd   pietereeckhout's schermafbeelding
    Geregistreerd
    23 October 2005
    Locatie
    maarkedal
    Berichten
    290
    Bedankjes
    63
    Bedankt
    23 keer in 21 posts
    Kzal het eens gaan proberen sie ..


    Er moest nog 1 ding veranderd worden:

    Public Const intAantalRekenVragenInTest As Integer = 3

    Dat hij het 'intAantalRekenVragenInTest' keer herhaald zal ik ook wel wegkrijgen.

    Ik denk wel dat ik alleen verder kan nu bedankt voor uw hulp!!!
    Laatst gewijzigd door pietereeckhout; 2 December 2007 om 12:15
    Post-It on Ivanhoejupiler Minatica

Discussie informatie

Users Browsing this Thread

Momenteel bekijken 1 gebruikers deze discussie. (0 leden en 1 gasten)

Favorieten/bladwijzers

Favorieten/bladwijzers

Regels voor berichten

  • Je mag geen nieuwe discussies starten
  • Je mag niet reageren op berichten
  • Je mag geen bijlagen versturen
  • Je mag niet je berichten bewerken
  •