Zoals je aan de titel kan zien oftewel het onderwerp, dat het gaat over Messagebox.Show
Als ik textboxen valideer of ze leeg zijn of dat er een controle is op
als er letters ingevuld zijn ipv alleen cijfers dan geeft het programma een melding, maar nu krijg ik voor elke fout vanwege MessageBox.Show een popup zegmaar...
fouten weggooien en opvangen... (try-catch blok dus)
Wat bedoel je met popup? messagebox.show geeft je toch een popup? de layout is lichtjes aanpasbaar bij de 3de of 4de parameter denk ik, anders kan je zelf een nieuw formuliertje maken dat je als popup kan gebruiken
Dim strErrors as String = ""
'Controle 1
If Not foo = bar Then
strErrors &= "Dit is de eerste fout" & Environment.Newline
End If
'Controle 2
If Not foo = bar Then
strErrors &= "Dit is de tweede fout" & Environment.Newline
End If
If Not strErrors = "" Then
MessageBox.Show(strErrors,"Er zijn fouten opgetreden")
End If
Dim strErrors asString=""
'Controle 1
IfNot foo = bar Then
strErrors &="Dit is de eerste fout"& Environment.Newline
EndIf
'Controle 2
IfNot foo = bar Then
strErrors &="Dit is de tweede fout"& Environment.Newline
EndIf
IfNot strErrors =""Then
MessageBox.Show(strErrors,"Er zijn fouten opgetreden")
Ja dat klopt, dat weet ik...alleen kan je een voorbeeld geven van zo'n
try-catch blok?
Abbas - 05/10/2008 20:30 (laatste wijziging 05/10/2008 20:31)
Crew .NET
wimmarien schreef:
fouten weggooien en opvangen... (try-catch blok dus)
Dit gebruik je niet echt bij validatie op een formulier ofzo. Het zijn dan ook niet echt fouten in de letterlijke zin van het woord, maar Exceptions. Bijvoorbeeld als je probeert te delen door 0, krijg je een DivideByZeroException, en die 'fouten' kan je opvangen in een try-catch blok. Niet het invullen van een formulier dat niet valid is!
rredspike1 schreef:
Ja dat klopt, dat weet ik...alleen kan je een voorbeeld geven van zo'n try-catch blok?
Dim xErrors As Integer = 0
Dim strErrors As String = "Volgende fouten zijn opgetreden:" & Environment.Newline
'Controle op naam
If String.IsNullOrEmpty(txtNaam.Text) Then
strErrors &= "- Naam invullen" & Environment.Newline
x = x + 1 'x++ werkt niet in VB.NET
End If
'Controle op email
If String.IsNullOrEmpty(txtMail.Text) Then
strErrors &= "- Email invullen" & Environment.Newline
x = x + 1
End If
'Controleren of er fouten zijn, indien ja: melding geven
If xErrors > 0 Then
MessageBox.Show(strErrors, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Dim xErrors AsInteger=0
Dim strErrors AsString="Volgende fouten zijn opgetreden:"& Environment.Newline
'Controle op naam
IfString.IsNullOrEmpty(txtNaam.Text)Then
strErrors &="- Naam invullen"& Environment.Newline
Eerst declareer je een Integer 'xErrors' om de fouten te tellen, daarna een String 'strErrors' om de foutmelding in weer te geven.
In de eerste controle wordt er gekeken of hetgeen in het tekstvak 'txtNaam' staat wel degelijk een waarde is, en niet NULL of gewoon leeg. In de tweede controle gebeurt net hetzelfde eigenlijk. Als er nu een veld leeg is, wordt er bij die strError de juiste foutmelding bijgezet, en de teller van de fouten gaat eentje omhoog. Na dit alles ga je kijken op hoeveel onze fouten-teller staat, is hij hoger dan 0 (als er dus een fout is) ga je die MessageBox weergeven met daarin alle fouten die voorgekomen zijn. Zo, ik hoop dat je het nu beter begrijpt.
ja want bij die andere... als ik dan weer op een knop druk en daarna op OK en daarna weer op een diezelfde knop druk krijg ik 2x dezelfde fouten onder elkaar...
Dim xErrors As Integer = 0
Dim strErrors As String = "Volgende fouten zijn opgetreden:" & Environment.Newline
'Controle op naam
If String.IsNullOrEmpty(txtNaam.Text) Then
strErrors &= "- Naam invullen" & Environment.Newline
x = x + 1 'x++ werkt niet in VB.NET
End If
'Controle op email
If String.IsNullOrEmpty(txtMail.Text) Then
strErrors &= "- Email invullen" & Environment.Newline
x = x + 1
End If
'Controleren of er fouten zijn, indien ja: melding geven
If xErrors > 0 Then
MessageBox.Show(strErrors, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Dim xErrors AsInteger=0
Dim strErrors AsString="Volgende fouten zijn opgetreden:"& Environment.Newline
'Controle op naam
IfString.IsNullOrEmpty(txtNaam.Text)Then
strErrors &="- Naam invullen"& Environment.Newline
Als ik een Public Variable maak dan geeft het programma telkens meer fouten aan...
eerste keer als ik op een knop druk krijg ik het xErrors aantal fouten te zien, klik ik op OK dan en daarna weer op dezelfde knop krijg ik 2x het aantal xErrors te zien....
If xErrors > 0 Then
MessageBox.Show(strErrors, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Warning)
If Windows.Forms.DialogResult.OK Then
xErrors = 0
End If
End If
Dus als er op OK is geclickt dan zet het programma xErrors weer op 0.
Nu komt het.... bij een Private gedeclareerde variable lukt het wel, maar bij een Public niet...hoe kan dit?
Public zegt toch alleen dat je het overal kan gebruiken? vreemd...
If String.IsNullOrEmpty(txtPrijs.Text) Then
strErrors &= "- Er is geen prijs ingevuld" & Environment.NewLine
xErrors = xErrors + 1
picPrijs_Melding.Visible = True
Else
picPrijs_Melding.Visible = False
End If
Dim Prijs As Decimal
'IsNumeric() is een ingebouwde funtie in VB.NET om na
'te kijken of een meegegeven parameter numeriek is.
'De functie geeft dan automatisch een True of False terug.
If IsNumeric(txtPrijs.Text) Then
'Numeriek (enkel cijfers)
Prijs = CType(txtPrijs.Text, Decimal)
strErrors &= "- Bij prijs zijn alleen cijfers toegestaan" & Environment.NewLine
xErrors = xErrors + 1
End If
If xErrors > 0 Then
MessageBox.Show(strErrors, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Warning)
If Windows.Forms.DialogResult.OK Then
xErrors = 0
End If
End If
IfString.IsNullOrEmpty(txtPrijs.Text)Then
strErrors &="- Er is geen prijs ingevuld"& Environment.NewLine
xErrors = xErrors +1
picPrijs_Melding.Visible=True
Else
picPrijs_Melding.Visible=False
EndIf
Dim Prijs As Decimal
'IsNumeric() is een ingebouwde funtie in VB.NET om na
'te kijken of een meegegeven parameter numeriek is.
'De functie geeft dan automatisch een True of False terug.
IfIsNumeric(txtPrijs.Text)Then
'Numeriek (enkel cijfers)
Prijs =CType(txtPrijs.Text, Decimal)
strErrors &="- Bij prijs zijn alleen cijfers toegestaan"& Environment.NewLine
Als ik bij prijs nu een cijfer invul, geeftie een fout aan terwijl bij een letter geen fout aan word gegeven...maar dit behoort andersom te zijn...hoe doe ik dit nu?
If IsNumeric(txtPrijs.Text) Then
'Numeriek (enkel cijfers)
Prijs = CType(txtPrijs.Text, Decimal)
strErrors &= "- Bij prijs zijn alleen cijfers toegestaan" & Environment.NewLine
xErrors = xErrors + 1
End If
IfIsNumeric(txtPrijs.Text)Then
'Numeriek (enkel cijfers)
Prijs =CType(txtPrijs.Text, Decimal)
strErrors &="- Bij prijs zijn alleen cijfers toegestaan"& Environment.NewLine
xErrors = xErrors +1
EndIf
Dit klopt niet. Als het numeric is geef je een fout. Je zou het als volgt moeten doen.
If IsNumeric(txtPrijs.Text) Then
'Numeriek (enkel cijfers)
Prijs = CType(txtPrijs.Text, Decimal)
Else
strErrors &= "- Bij prijs zijn alleen cijfers toegestaan" & Environment.NewLine
xErrors = xErrors + 1
End If
IfIsNumeric(txtPrijs.Text)Then
'Numeriek (enkel cijfers)
Prijs =CType(txtPrijs.Text, Decimal)
Else
strErrors &="- Bij prijs zijn alleen cijfers toegestaan"& Environment.NewLine
Abbas - 06/10/2008 01:58 (laatste wijziging 06/10/2008 02:02)
Crew .NET
Logisch, je hebt de errormessage in het foute stuk van je If staan! En je moet niet perse eerst gaan kijken of de DialogResult gelijk is aan OK, gewoon na die MessageBox.Show() zet je die xErrors terug op 0.
Dim Prijs As Decimal
If String.IsNullOrEmpty(txtPrijs.Text) Then
MessageBox.Show("Geen prijs ingevuld!", "Fout", MessageBoxButtons.OK, MessageBoxIcon.Warning)
picPrijs_Melding.Visible = True
Else
picPrijs_Melding.Visible = False
If IsNumeric(txtPrijs.Text) Then
Prijs = CType(txtPrijs.Text, Decimal)
Else
MessageBox.Show("Enkel cijfers toegestaan!", "Fout", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If
End If
Ik heb de code ook aangepast. De tweede if-constructie zit nu binnen de eerste, omdat dit logischer is. Ook nu gewoon op de juiste plaats een MessageBox geven in plaats van achteraf.
Nu heb ik nog een goedkoop microsoft access programma nodig...hmmm heb alleen openoffice...dat schiet niet op die kan je niet koppelen aan VB.Net... dat is een .ODT ipv .MDB
Abbas - 06/10/2008 02:07 (laatste wijziging 06/10/2008 02:08)
Crew .NET
Nope, laten staan! Stel iemand vult het formulier fout in, dan wordt die picPrijs op Visible gezet. Maar als daarna het formulier wel juist ingevuld is moet die TERUG op False gezet worden!
Edit:
Je kan een Express Edition van SQL Server 2005/2008 Downloaden!
Nope, laten staan! Stel iemand vult het formulier fout in, dan wordt die picPrijs op Visible gezet. Maar als daarna het formulier wel juist ingevuld is moet die TERUG op False gezet worden!Â
Edit:
Je kan een Express Edition van SQL Server 2005/2008 Downloaden!Â
[..quote..]Dit gebruik je niet echt bij validatie op een formulier ofzo. Het zijn dan ook niet echt fouten in de letterlijke zin van het woord, maar Exceptions. Bijvoorbeeld als je probeert te delen door 0, krijg je een DivideByZeroException, en die 'fouten' kan je opvangen in een try-catch blok. Niet het invullen van een formulier dat niet valid is!Â
[..quote..]Hier is een hele tutorial van mij gewijd aan Exception Handling.Â
@Ontani: je kan 'beter' gebruik maken van de ingebouwde .NET-functie om na te gaan of een string null/leeg is, namelijk IsNullOrEmpty()Â
[..code..]
Waarom zo en waarom geen validatiecontrols dan? zitten standaard bij VB.NET bij, zelfs in de 2003 zaten ze met 100% zekerheid al in! In 2005 en 2008 ontbreken ze ook niet...
Waarom zo en waarom geen validatiecontrols dan? zitten standaard bij VB.NET bij, zelfs in de 2003 zaten ze met 100% zekerheid al in! In 2005 en 2008 ontbreken ze ook niet...
Ga jij de Validation Controls maar eens gebruiken in een Windows Applicatie! Door het feit dat hij een MessageBox gebruikt weet ik dat hij met een WindowsApplication bezig is en niet WebBased. En die specifieke Validation Controls, die er inderdaad al een hele tijd zijn, zijn bestemd voor WebBased toepassingen en niet voor WindowsApplications. Ik weet waarover ik spreek, ik heb er namelijk zelf een tutorial over geschreven!