login  Naam:   Wachtwoord: 
Registreer je!
 Forum

VB.NET oefening op select-case

Offline djstyrux - 18/01/2008 16:39 (laatste wijziging 18/01/2008 16:40)
Avatar van djstyruxLid Ik heb voor school de opdracht gekregen op de select-case structuur.
afbeelding van het uitzicht van de oefening:
Afbeelding

De bedoeling is dat er een waarde wordt ingegeven in de eerste textbox.

De eenheid van deze waarde wordt bepaald aan de hand van de linkerlistbox.
Dan moet er in de rechterlistbox ook een waarde worden geselecteerd, waarna het getal wordt omgezet naar deze eenheid in de onderste textbox.

Kan iemand me helpen?

13 antwoorden

Gesponsorde links
Offline Abbas - 18/01/2008 17:33
Avatar van Abbas Gouden medaille

Crew .NET
Hier is de code voor je Form, ik heb dezelfde Controls en elementen gebruikt als op de screenshot die je gaf.
  1. 'Enkele variabelen declareren
  2. Dim invoer As Double
  3. Dim resultaat As Double
  4. Dim y As Integer
  5.  
  6. 'Als het tekstvak of een van de listboxen niet geselecteerd is een foutmelding weergeven
  7. If TextBox1.Text = "" Or ListBox1.SelectedItem = "" Or ListBox2.SelectedItem = "" Then
  8. MessageBox.Show("Geen correcte invoer", "FOUT", MessageBoxButtons.OK, MessageBoxIcon.Error)
  9. Return
  10. End If
  11.  
  12. 'Kijken of de invoer wel een getal is en omzetten naar een double
  13. 'Anders een foutmelding weergeven
  14. Try
  15. invoer = Convert.ToDouble(TextBox1.Text)
  16. Catch ex As Exception
  17. MessageBox.Show(ex.Message, "FOUT", MessageBoxButtons.OK, MessageBoxIcon.Error)
  18. Return
  19. End Try
  20.  
  21. 'De index van de geselcteerde items bepalen en daarna het verschil hiervan maken
  22. Dim lb_een As Integer = ListBox1.SelectedIndex
  23. Dim lb_twee As Integer = ListBox2.SelectedIndex
  24. Dim x = lb_een - lb_twee
  25.  
  26. 'Als het verschil 0 is wil dit zeggen dat de items hetzelfde zijn
  27. 'Dus kan je een melding geven dat dit geen zin heeft
  28. If x = 0 Then
  29. MessageBox.Show("Dit heeft geen zin!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
  30. Return
  31. End If
  32.  
  33. 'Als x kleiner is dan 0, wat wil zeggen dat je van een kleine oppervlaktemaat naar een grotere gaat
  34. 'Dus moet je gaan delen, niet door 100 maar door 100 tot de macht van het verschil van de indexen
  35. 'Als x negatief is moet je daarom even de absolute waarde nemen om de macht te kunnen doen
  36. If x < 0 Then
  37. y = Math.Abs(x)
  38. resultaat = invoer / Math.Pow(100, y)
  39. Else
  40. 'Als x groter is dan 0, moet je gaan vermenigvuldigen, net op de zelfde manier
  41. 'als bij het delen: 100 tot de macht van het verschil van de indexen
  42. resultaat = invoer * Math.Pow(100, x)
  43. End If
  44.  
  45. 'Het resultaat in het tekstvak onderaan zetten
  46. TextBox2.Text = resultaat.ToString()
Offline djstyrux - 18/01/2008 23:54
Avatar van djstyrux Lid Dank voor de snelle reactie en geslaagde code, maar helaas werk je niet met de select-case structuur, wat toch zkr nodig is in deze opdracht.

Mss. gebruiken jullie hiervoor een andere benaming maar ik bedoel dus:

Select case ...
case is ...
case is ...
case is ...
End select

Dank,
Offline Abbas - 19/01/2008 00:26
Avatar van Abbas Gouden medaille

Crew .NET
Nee, ik gebruik ook de benaming al zie ik er in een oefening als deze totaal het nut niet van in, dat ten eerste. En ten tweede waar zou je dan de case gaan gebruiken? Staat het ergens in die opdracht omschreven waarvoor je die moet gebruiken?
Offline Stijn - 19/01/2008 00:56 (laatste wijziging 19/01/2008 00:58)
Avatar van Stijn PHP expert @titjes: ik dacht er ook aan. Hij zal wel de km op het einde moeten zetten in plaats van na meter. Volgens mij kan dit korter (ik zal het even proberen en morgen posten).
Offline Abbas - 19/01/2008 01:05
Avatar van Abbas Gouden medaille

Crew .NET
1.
Mijn code lijkt alleen lang door de commentaar die ik erbij heb gezet om alles duidelijk te maken. Maar zonder de commentaar zijn het maar 28 regels, en dat met alle controle die er moet zijn.

2.
Probeer en post het maar, ik zie dat die 2% begint te werken! 
Offline Stijn - 19/01/2008 15:53
Avatar van Stijn PHP expert
  1. Public Class Form1
  2.  
  3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.  
  5. Dim result, index_1, index_2 As Double
  6.  
  7. index_1 = list_1.SelectedIndex
  8. index_2 = list_2.SelectedIndex
  9.  
  10. result = Double.Parse(txt_getal.Text) * Math.Pow(100, index_2 - index_1)
  11.  
  12. txt_result.Text = result
  13.  
  14. End Sub
  15.  
  16. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  17. list_1.SelectedIndex = 0
  18. list_2.SelectedIndex = 0
  19. End Sub
  20.  
  21. End Class


De listbox'en moeten wel in de correcte volgorde staan.

list_1 schreef:
mm²
cm²
dm²

deca²
hecto²
km²
Offline Abbas - 19/01/2008 15:57
Avatar van Abbas Gouden medaille

Crew .NET
Ok, je code is korter maar:
- je doet geen controle op de invoer, als ik dit ook niet doe is m'n code ongeveer even lang.
- je maakt ook geen gebruik van een select-case, wat volgens de TO in de opgave stond.

Het is duidelijk dat die 2% nog niet genoeg is! ^^
Offline Stijn - 19/01/2008 16:00
Avatar van Stijn PHP expert Wat is hier select-case aan deze oefening En als de invoer niet correct is zal Double.parse(...); een 0 returnen.
Offline Abbas - 19/01/2008 16:16
Avatar van Abbas Gouden medaille

Crew .NET
stijn1989 schreef:
Wat is hier select-case aan deze oefening
Weet ik ook niet maar blijkbaar moet het! 
Offline zwobbel - 20/01/2008 09:56 (laatste wijziging 20/01/2008 09:56)
Avatar van zwobbel PHP gevorderde Ik begrijp wel hoe je ook een werkend prog kan maken met een select case maar de code die hierbove word gegeve is veel korter dan wanneer je een select case zou gebruiken.

En zover ik weet gelden toch nog altijd de regels hoe korter hoe beter?
Ale of toch meestal 

(ik zie namelijk liever een knap maske me een kort rokje dan in een lang  )
Offline djstyrux - 20/01/2008 15:31
Avatar van djstyrux Lid jep,
maar in school moet echt wel met select-case worden gewerkt, aangezien het hierop een oefening is  
hoe dom het ook lykt  
Offline kstr - 16/02/2008 10:58 (laatste wijziging 16/02/2008 10:59)
Avatar van kstr Lid
Offline Abbas - 16/02/2008 11:31 (laatste wijziging 16/02/2008 11:35)
Avatar van Abbas Gouden medaille

Crew .NET
Waarom een leeg bericht? Als je iets niet zeker weet post dan niet!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.203s