login  Naam:   Wachtwoord: 
Registreer je!
 Forum

MessageBox.Show (Opgelost)

Offline rredspike1 - 05/10/2008 20:07
Avatar van rredspike1Lid 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...

Alleen hoe laat ik alle fouten zien in 1 popup

23 antwoorden

Gesponsorde links
Offline Wim - 05/10/2008 20:09
Avatar van Wim Crew algemeen 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
Offline Ontani - 05/10/2008 20:10
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Alle errors in een variabele steken bijvoorbeeld:
  1. Dim strErrors as String = ""
  2.  
  3. 'Controle 1
  4. If Not foo = bar Then
  5. strErrors &= "Dit is de eerste fout" & Environment.Newline
  6. End If
  7.  
  8. 'Controle 2
  9. If Not foo = bar Then
  10. strErrors &= "Dit is de tweede fout" & Environment.Newline
  11. End If
  12.  
  13. If Not strErrors = "" Then
  14. MessageBox.Show(strErrors,"Er zijn fouten opgetreden")
  15. End If
Offline rredspike1 - 05/10/2008 20:10
Avatar van rredspike1 Lid Ja dat klopt, dat weet ik...alleen kan je een voorbeeld geven van zo'n

try-catch blok?
Offline Abbas - 05/10/2008 20:30 (laatste wijziging 05/10/2008 20:31)
Avatar van Abbas Gouden medaille

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?
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() 
  1. Dim xErrors As Integer = 0
  2. Dim strErrors As String = "Volgende fouten zijn opgetreden:" & Environment.Newline
  3.  
  4. 'Controle op naam
  5. If String.IsNullOrEmpty(txtNaam.Text) Then
  6. strErrors &= "- Naam invullen" & Environment.Newline
  7. x = x + 1 'x++ werkt niet in VB.NET
  8. End If
  9.  
  10. 'Controle op email
  11. If String.IsNullOrEmpty(txtMail.Text) Then
  12. strErrors &= "- Email invullen" & Environment.Newline
  13. x = x + 1
  14. End If
  15.  
  16. 'Controleren of er fouten zijn, indien ja: melding geven
  17. If xErrors > 0 Then
  18. MessageBox.Show(strErrors, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error)
  19. End If

Offline rredspike1 - 05/10/2008 21:01
Avatar van rredspike1 Lid He bedankt,

Kan je die code uitleggen? 

bedankt

Offline Abbas - 05/10/2008 21:08
Avatar van Abbas Gouden medaille

Crew .NET
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. 
Offline rredspike1 - 06/10/2008 01:03 (laatste wijziging 06/10/2008 01:08)
Avatar van rredspike1 Lid 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...

Trouwens
  1. Dim xErrors As Integer = 0
  2. Dim strErrors As String = "Volgende fouten zijn opgetreden:" & Environment.Newline
  3.  
  4. 'Controle op naam
  5. If String.IsNullOrEmpty(txtNaam.Text) Then
  6. strErrors &= "- Naam invullen" & Environment.Newline
  7. x = x + 1 'x++ werkt niet in VB.NET
  8. End If
  9.  
  10. 'Controle op email
  11. If String.IsNullOrEmpty(txtMail.Text) Then
  12. strErrors &= "- Email invullen" & Environment.Newline
  13. x = x + 1
  14. End If
  15.  
  16. 'Controleren of er fouten zijn, indien ja: melding geven
  17. If xErrors > 0 Then
  18. MessageBox.Show(strErrors, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error)
  19. End If


Die ---> x = x + 1 moet zijn xErrors = xErrors + 1 anders zegt het programma is niet gedeclareerd
Offline Abbas - 06/10/2008 01:13
Avatar van Abbas Gouden medaille

Crew .NET
Ja, klein fouthje van me! Die x moet inderdaad xErrors zijn.. 
Offline rredspike1 - 06/10/2008 01:38
Avatar van rredspike1 Lid Heej nog een vraagje hé

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....

nu had ik gezegd in
  1. If xErrors > 0 Then
  2. MessageBox.Show(strErrors, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  3. If Windows.Forms.DialogResult.OK Then
  4. xErrors = 0
  5. End If
  6. 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...
Offline Abbas - 06/10/2008 01:45
Avatar van Abbas Gouden medaille

Crew .NET
Geef eens wat meer code voor de duidelijkheid! 
Offline rredspike1 - 06/10/2008 01:51 (laatste wijziging 06/10/2008 01:52)
Avatar van rredspike1 Lid Ben er al uit 

Nog wat !!!

Gaat om de volgende code
  1. If String.IsNullOrEmpty(txtPrijs.Text) Then
  2. strErrors &= "- Er is geen prijs ingevuld" & Environment.NewLine
  3. xErrors = xErrors + 1
  4. picPrijs_Melding.Visible = True
  5. Else
  6. picPrijs_Melding.Visible = False
  7. End If
  8.  
  9. Dim Prijs As Decimal
  10. 'IsNumeric() is een ingebouwde funtie in VB.NET om na
  11. 'te kijken of een meegegeven parameter numeriek is.
  12. 'De functie geeft dan automatisch een True of False terug.
  13. If IsNumeric(txtPrijs.Text) Then
  14. 'Numeriek (enkel cijfers)
  15. Prijs = CType(txtPrijs.Text, Decimal)
  16. strErrors &= "- Bij prijs zijn alleen cijfers toegestaan" & Environment.NewLine
  17. xErrors = xErrors + 1
  18. End If
  19.  
  20. If xErrors > 0 Then
  21. MessageBox.Show(strErrors, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  22. If Windows.Forms.DialogResult.OK Then
  23. xErrors = 0
  24. End If
  25. End If


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?
Offline Stijn - 06/10/2008 01:56
Avatar van Stijn PHP expert
  1. If IsNumeric(txtPrijs.Text) Then
  2. 'Numeriek (enkel cijfers)
  3. Prijs = CType(txtPrijs.Text, Decimal)
  4. strErrors &= "- Bij prijs zijn alleen cijfers toegestaan" & Environment.NewLine
  5. xErrors = xErrors + 1
  6. End If


Dit klopt niet. Als het numeric is geef je een fout. Je zou het als volgt moeten doen.

  1. If IsNumeric(txtPrijs.Text) Then
  2. 'Numeriek (enkel cijfers)
  3. Prijs = CType(txtPrijs.Text, Decimal)
  4. Else
  5. strErrors &= "- Bij prijs zijn alleen cijfers toegestaan" & Environment.NewLine
  6. xErrors = xErrors + 1
  7. End If


(damn, ik heb zonet .NET gedaan )
Offline rredspike1 - 06/10/2008 01:58
Avatar van rredspike1 Lid hahaha! lol
Offline Abbas - 06/10/2008 01:58 (laatste wijziging 06/10/2008 02:02)
Avatar van Abbas Gouden medaille

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. 

  1. Dim Prijs As Decimal
  2. If String.IsNullOrEmpty(txtPrijs.Text) Then
  3. MessageBox.Show("Geen prijs ingevuld!", "Fout", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  4. picPrijs_Melding.Visible = True
  5. Else
  6. picPrijs_Melding.Visible = False
  7. If IsNumeric(txtPrijs.Text) Then
  8. Prijs = CType(txtPrijs.Text, Decimal)
  9. Else
  10. MessageBox.Show("Enkel cijfers toegestaan!", "Fout", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  11. End If
  12. 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. 
Offline Stijn - 06/10/2008 02:05
Avatar van Stijn PHP expert
  1. picPrijs_Melding.Visible = False

Die regel kan ook weg, aangezien die standaard op False staat (anders zou je hem niet Visible zetten in regel 4).
Offline rredspike1 - 06/10/2008 02:06
Avatar van rredspike1 Lid bedankt!!

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
Offline Abbas - 06/10/2008 02:07 (laatste wijziging 06/10/2008 02:08)
Avatar van Abbas Gouden medaille

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! 
Offline rredspike1 - 06/10/2008 02:07 (laatste wijziging 06/10/2008 02:09)
Avatar van rredspike1 Lid
stijn1989 schreef:
[..code..]
Die regel kan ook weg, aangezien die standaard op False staat (anders zou je hem niet Visible zetten in regel 4).


Hahaha niet te wijs he ;):P:D lol

Klopt...standaard op false

maar verander het niet, vanwege wat titjes zei
Offline Abbas - 06/10/2008 02:09 (laatste wijziging 06/10/2008 02:10)
Avatar van Abbas Gouden medaille

Crew .NET
Lees m'n reactie op die van Stijn, die regel mag niet weg!

Edit: OK! :D
Offline rredspike1 - 06/10/2008 02:10
Avatar van rredspike1 Lid
titjes schreef:
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! 


Gloeiende jaah....!!!!!

bedankt!!
Offline Wim - 06/10/2008 17:51
Avatar van Wim Crew algemeen
titjes schreef:
[..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...
Offline rredspike1 - 06/10/2008 19:21 (laatste wijziging 06/10/2008 19:21)
Avatar van rredspike1 Lid huh hoe bedoel je wimmarien

heb jij een beter idee?
Offline Abbas - 13/10/2008 23:37
Avatar van Abbas Gouden medaille

Crew .NET
wimmarien schreef:
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! 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.221s