Textbox automatisch aanpassen bij foute invoer

Status
Niet open voor verdere reacties.

dannymoerkerke

Gebruiker
Lid geworden
22 apr 2014
Berichten
5
Hoi allemaal,

Allereerst wil ik even aangeven dat ik net begonnen ben met VB, groentje dus.
Waarschijnlijk is mijn vraag dan ook wel simpel te beantwoorden.

Ik heb een simpel rekensommetje gemaakt, een aantal textboxen op een form met hierop ook een button welke een bepaalde berekening uitvoerd.
Wanneer ik bijvoorbeeld een letter invoer ipv een cijfer krijg ik een foutmelding.
Is het mogelijk om een regel in te voeren welke een omschrijving geeft wat er fout gaat, dus:
If textbox1.text="a" then msgbox = "sorry dit is een foute invoer"
Zoiets.

Ik hoop dat ik het een beetje duidelijk heb kunnen omschrijven.

Alvast bedankt,

Gr. Danny
 
Je hebt alleen een = teken teveel staan ;)
If textbox1.text="a" then msgbox "sorry dit is een foute invoer"

Er zijn veel meer mogelijkheden maar dit is wel de eenvoudigste.
 
In dit specifieke geval is het beter om ervoor te zorgen dat er geen andere dingen ingevoerd kunnen worden. Dit kan via het textbox changed event (of leave event).

Mogelijk is dat wel meteen wat geavanceerd, maar er zijn dus verschillende mogelijkheden
 
Hoi edmoor,

Bedankt voor je snelle reactie.
Na het aanpassen van m'n opdracht kreeg ik onderstaande foutmelding:
"De conversie van tekenreeks a naar type Single is ongeldig"

Onderstaand vind je m'n complete opdracht:
Code:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim box1, box2, box3, box4, box5, box6, box7 As Single
        box1 = CSng(TextBox1.Text)
        box2 = CSng((TextBox2.Text))
        box3 = CSng((TextBox3.Text))
        box4 = CSng((TextBox4.Text))
        box5 = CSng((TextBox5.Text))
        box6 = CSng((TextBox6.Text))
        box7 = CSng(TextBox7.Text)

        TextBox8.Text = CStr((box1) + (box2 / 6) + ((box3 + box4 + box5) / 5) + ((box6 + box7) / 15))
        If TextBox1.Text = "a" Then MsgBox("sorry dit is een foute invoer")
    End Sub
Hoor graag van je wat ik fout doe.

Thanks.

Gr. Danny
 
Laatst bewerkt door een moderator:
Hoi wampier,

Bedankt voor je reactie.

Textbox change event zegt me inderdaad niet veel, gaat denk ik nog een beetje te ver.
Ga wel googelen hoe dit werkt.
Misschien dat je me een beetje in de goede richting kan sturen?

Thanks.

Gr. Danny
 
Ik weet het niet zeker maar ik denk dat het hier mis gaat:
Dim box1, box2, box3, box4, box5, box6, box7 As Single

Nu wordt alleen de variabele box7 als Single gedeclareert.
Geef iedere variabele apart z'n eigen datatype.
 
het gaat mis omdat je eerst op regel 3 probeert te converteren en pas op regel 11 controleert of het wel goede input is ;)
 
Haha, dat zou wat zijn!
Nee, het is een runtime fout die hij netjes moet opvangen.
 
Laatst bewerkt:
? Als je je input wil checken moet je dat doen voor enig ander ding. Wat ik bedoel is:

Code:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        If TextBox1.Text = "a" Then
           MsgBox("sorry dit is een foute invoer")
           exit sub
        end if
        Dim box1, box2, box3, box4, box5, box6, box7 As Single
        box1 = CSng(TextBox1.Text)
        box2 = CSng((TextBox2.Text))
        box3 = CSng((TextBox3.Text))
        box4 = CSng((TextBox4.Text))
        box5 = CSng((TextBox5.Text))
        box6 = CSng((TextBox6.Text))
        box7 = CSng(TextBox7.Text)

        TextBox8.Text = CStr((box1) + (box2 / 6) + ((box3 + box4 + box5) / 5) + ((box6 + box7) / 15))
       
End Sub

Maar ik zal eens even kijken of ik een voorbeeldje ergens heb. Danny welke visual studio versie gebruik je?
 
Worden zo wel al die box variabelen als Single gedeclareerd? In VBA niet maar voor Visual Basic weet ik het niet zeker. Dat weet jij vast uit het hoofd :)

Maar het is inderdaad beter om dat in het Leave of Change event te controleren.
 
Laatst bewerkt:
Hoi wampier,

Ik gebruik versie 2013.

Ik heb bovenstaande aanpassing geprobeerd en het werkt.
Wat ik nu ga proberen is dit toe te passen op textbox 1 t/m 7 en dan gaat het om alle tekens behalve getallen.
Bedankt, ben weer een stukje dichterbij.

Moet nu helaas aan het werk.

Gr. Danny
 
plak de volgende code ergens in je form class:

Code:
    Private Sub Mybox_TextChanged(sender As System.Object, e As System.EventArgs)
 
        If sender.text = "" Then Exit Sub

        Dim ValueCheck As Double
        ValueCheck = Val(sender.text)
        If ValueCheck = 0 Then
            sender.text = ""
        Else
            sender.text = ValueCheck
            sender.SelectionStart = Len(sender.Text)
        End If

    End Sub

Ga nu naar een textbox, selecteer die en bij de properties click op events (oranje bliksem). Scroll naar textchanged en click op het vlakje erachter. click het pijltje naar beneden en selecteer mybox_textchanged. Doe dit voor al je tekstvakjes
 
Laatst bewerkt:
Dit lijkt mij dan het handigst, in ieder geval handiger dan 7x dezelfde code te hebben:

[cpp]Private Sub Mybox_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged ... TextBox7.TextChanged
...
End Sub[/cpp]
 
Hé allemaal,

Bedankt voor jullie input.
Ben zelf nog even aan het googelen geweest en heb het volgende toegepast:
if isnumeric(textbox1.text)=false then msgbox("blablabla")

en wat denk je? Het werkt

Nogmaals bedankt.

Gr. Danny
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan