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.
'Enkele variabelen declareren
Dim invoer As Double
Dim resultaat As Double
Dim y As Integer
'Als het tekstvak of een van de listboxen niet geselecteerd is een foutmelding weergeven
If TextBox1.Text = "" Or ListBox1.SelectedItem = "" Or ListBox2.SelectedItem = "" Then
MessageBox.Show("Geen correcte invoer", "FOUT", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
'Kijken of de invoer wel een getal is en omzetten naar een double
'Anders een foutmelding weergeven
Try
invoer = Convert.ToDouble(TextBox1.Text)
Catch ex As Exception
MessageBox.Show(ex.Message, "FOUT", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End Try
'De index van de geselcteerde items bepalen en daarna het verschil hiervan maken
Dim lb_een As Integer = ListBox1.SelectedIndex
Dim lb_twee As Integer = ListBox2.SelectedIndex
Dim x = lb_een - lb_twee
'Als het verschil 0 is wil dit zeggen dat de items hetzelfde zijn
'Dus kan je een melding geven dat dit geen zin heeft
If x = 0 Then
MessageBox.Show("Dit heeft geen zin!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
Return
End If
'Als x kleiner is dan 0, wat wil zeggen dat je van een kleine oppervlaktemaat naar een grotere gaat
'Dus moet je gaan delen, niet door 100 maar door 100 tot de macht van het verschil van de indexen
'Als x negatief is moet je daarom even de absolute waarde nemen om de macht te kunnen doen
If x < 0 Then
y = Math.Abs(x)
resultaat = invoer / Math.Pow(100, y)
Else
'Als x groter is dan 0, moet je gaan vermenigvuldigen, net op de zelfde manier
'als bij het delen: 100 tot de macht van het verschil van de indexen
resultaat = invoer * Math.Pow(100, x)
End If
'Het resultaat in het tekstvak onderaan zetten
TextBox2.Text = resultaat.ToString()
'Enkele variabelen declareren
Dim invoer AsDouble
Dim resultaat AsDouble
Dim y AsInteger
'Als het tekstvak of een van de listboxen niet geselecteerd is een foutmelding weergeven
If TextBox1.Text="" Or ListBox1.SelectedItem="" Or ListBox2.SelectedItem=""Then
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?
@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).
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!
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim result, index_1, index_2 As Double
index_1 = list_1.SelectedIndex
index_2 = list_2.SelectedIndex
result = Double.Parse(txt_getal.Text) * Math.Pow(100, index_2 - index_1)
txt_result.Text = result
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
list_1.SelectedIndex = 0
list_2.SelectedIndex = 0
End Sub
End Class
PublicClass Form1
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
Dim result, index_1, index_2 AsDouble
index_1 = list_1.SelectedIndex
index_2 = list_2.SelectedIndex
result =Double.Parse(txt_getal.Text)* Math.Pow(100, index_2 - index_1)
txt_result.Text= result
EndSub
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)HandlesMyBase.Load
list_1.SelectedIndex=0
list_2.SelectedIndex=0
EndSub
EndClass
De listbox'en moeten wel in de correcte volgorde staan.
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! ^^
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 )