Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / School & Studie / Huiswerkvragen: Exacte vakken
Reageren
 
Topictools Zoek in deze topic
Oud 09-04-2008, 16:15
Lothar
Ik ben dus een programma aan het schrijven in Visual Basic.

uitleg:


(sorry voor de slordige paint tekening)

De bedoeling is dus dat ik een getal invoer in TxtAantal, dan een keuzerondje kies, ik klik op berekenen en het resultaat komt te voor schijn in TxtTotaal.

(berekenen staat niet op de tekening van hierboven maar is er wel..)

Elk keuzerondje stelt een getal voor. Hier volgt even de code die ik nu al heb. Maar het werkt niet, kan iemand me helpen?

Private Sub CmdBerekenen_Click()
'variabelen
Dim SngEen As Single
Dim SngTweeAs Single
Dim SngDrie As Single
Dim SngVier As Single
Dim SngVijf As Single

'berekeningen
SngEen = TxtAantal * 21.6
SngTwee = TxtAantal * 52.8
SngDrie = TxtAantal * 68.4
SngVier = TxtAantal * 87
SngVijf = TxtAantal * 58.6


'resultaat tonen
If OptEen = True Then TxtGold = SngEen
Else: If OptTwee = True Then TxtGold = SngTwee
Else: If OptDrie = True Then TxtGold = SngDrie
Else: If OptVier = True Then TxtGold = SngVier
Else: If OptVijf = True Then TxtGold = SngVijf
Else: TxtTotaal = ""
End If

End Sub

Alle hulp is welkom, bedankt
Met citaat reageren
Advertentie
Oud 09-04-2008, 18:37
mathfreak
Avatar van mathfreak
mathfreak is offline
Ik heb je code als volgt aangepast:
Code:
Private Sub CmdBerekenen_Click()
        'variabelen
        Dim TxtAantal, TxtGold, SngEen, SngTwee, SngDrie, SngVier, SngVijf As Single
        Dim OptEen, OptTwee, OptDrie, OptVier, OptVijf As Boolean
        Dim TxtTotaal As String
        'berekeningen
        SngEen = TxtAantal * 21.6
        SngTwee = TxtAantal * 52.8
        SngDrie = TxtAantal * 68.4
        SngVier = TxtAantal * 87
        SngVijf = TxtAantal * 58.6


        'resultaat tonen
        If OptEen = True Then
            TxtGold = SngEen
        ElseIf OptTwee = True Then
            TxtGold = SngTwee
        ElseIf OptDrie = True Then
            TxtGold = SngDrie
        ElseIf OptVier = True Then
            TxtGold = SngVier
        ElseIf OptVijf = True Then
            TxtGold = SngVijf
        Else : TxtTotaal = ""
        End If
__________________
"Mathematics is a gigantic intellectual construction, very difficult, if not impossible, to view in its entirety." Armand Borel

Laatst gewijzigd op 10-04-2008 om 17:17.
Met citaat reageren
Oud 10-04-2008, 07:20
Gunkan
Gunkan is offline
Werkt het

Code:
code blok
hier niet?

EDIT:
Wel dus... Da's misschien wel handig als je grotere lappen code gaat laten zien. *suggestie doet*
Met citaat reageren
Oud 10-04-2008, 20:49
Lothar
Citaat:
Werkt het

Code:
code blok
hier niet?

EDIT:
Wel dus... Da's misschien wel handig als je grotere lappen code gaat laten zien. *suggestie doet*
en hoe doe je dat dan?

en er zat een klein foutje in de code die ik gekopieerd hebt. TxtTotaal is het zelfde als TxtGold..
Khad de namen vereenvoudigd zodat het makkelijker werd om mij te helpen... Maar de code werkt nu nog niet.. Nog eens overkijken aub?
Met citaat reageren
Oud 11-04-2008, 05:20
Gunkan
Gunkan is offline
Citaat:
En hoe doe je dat dan?
Ah, sorry In plaats van het woordje "quote" tussen blokhaken, zoals voor een citaat, schrijf je nu "code" tussen de blokhaken.
Met citaat reageren
Oud 11-04-2008, 07:15
Verwijderd
Citaat:
en hoe doe je dat dan?

en er zat een klein foutje in de code die ik gekopieerd hebt. TxtTotaal is het zelfde als TxtGold..
Khad de namen vereenvoudigd zodat het makkelijker werd om mij te helpen... Maar de code werkt nu nog niet.. Nog eens overkijken aub?
kan je niet via de debugmode achterhalen waar het programma er mee stopt?
Met citaat reageren
Oud 12-04-2008, 12:59
mathfreak
Avatar van mathfreak
mathfreak is offline
Even de diverse stappen op een rij: je wilt een bepaald getal weergeven in het bovenste tekstvak. Stel dat je dit tekstvak TxtBox1 hebt genoemd en dat je voor het in te voeren getal de variabele Getal declareert. Je definieert dan: Getal=InputBox("Geef een getal op:"). Hiermee geef je via een invoervenster de waarde van Getal op. Om deze waarde in het bovenste tekstvak weer te geven gebruik je de opdracht TxtBox1.Text=Getal.
Nu wil je, afhankelijk van het keuzerondje dat je kiest, een bepaalde waarde in het tekstvak bij dat keuzerondje laten verschijnen. Omdat je 5 keuzerondjes hebt (zeg met de namen RBtn1, RBtn2, RBtn3, RBtn4 en RBtn5) moet je dus 5 keer controleren of een van deze keuzerondjes geselecteerd is. Zo ja, dan komt er in het bijbehorende tekstvak (zeg met de namen TxtBox2, TxtBox3, TxtBox4, TxtBox5 en TxtBox6) een getal te staan. Als er geen enkel keuzerondje geselecteerd is komt er in het onderste tekstvak (zeg met de naam TxtBox7) een 0 te staan. Stel dat het keuzerondje met de naam RBtn1 is geselecteerd. Deze eigenschap wordt in Visual Basic weergegeven als RBtn1.Checked=True. De eigenschap geeft dus een Boolean waarde als uitkomst. Je definieert nu een Boolean variabele Aangeklikt. Omdat je 5 keuzerondjes hebt krijgt Aangeklikt bij ieder keuzerondje de waarde RBtn.Checked, waarbij RBtn de naam van het desbetreffende keuzerondje voorstelt. Als Aangeklikt de waarde True heeft, dus als het keuzerondje is geselecteerd, moet er in het bijbehorende tekstvak (zeg TxtBox) een waarde Getal*AnderGetal worden opgeslagen. Je krijgt dus een instructie in de vorm
Code:
Aangeklikt=RBtn.Checked
         If Aangeklikt=True Then
         TxtBox.Text=Getal*AnderGetal
         End If
Omdat je deze instructie 5 keer achter elkaar uitvoert zou je gebruik kunnen maken van geneste If-Elseif statements, maar bij meer dan 3 te testen voorwaarden wordt dat nogal onoverzichtelijk. Je kunt in plaats daarvan ook gebruik maken van een Select Case statement. Het begin daarvan ziet er dan uit als
Code:
Select Case Aantal
         Case Aangeklikt=RBtn1.Checked
         If Aangeklikt=True Then
         TxtBox2.Text=Getal*AnderGetal1
         End If
Voor de overige 4 keuzerondjes ziet je Case instructie er precies zo uit. Na deze instructies sluit je af met
Code:
Case Else
         TxtBox7.Text=0
         End Select
Merk op dat je zo slechts 2 variabelen nodig hebt, namelijk Getal en Aangeklikt, om zo de waarden in de desbetreffende tekstvakken in te laten stellen.
__________________
"Mathematics is a gigantic intellectual construction, very difficult, if not impossible, to view in its entirety." Armand Borel
Met citaat reageren
Oud 12-04-2008, 13:14
Lothar
bedankt Mathfreak voor de tijd die je er in hebt gestopt!
Ik zal nu proberen de code aan te passen aan wat je vertelde
alvast bedankt
Met citaat reageren
Oud 12-04-2008, 14:29
Lothar
Ok, kheb alles eens rustig overlezen. Enkele dingen begrijp ik niet..

-Wat?
Ik heb een vakje waar ik een getal invoer (In jouw uitleg TxtBox1). Dan heb ik 5 keuzerondjes (RBtn 1-5). Je hebt dan naast elke RBtn nog een TxtBox (TxtBox2-6). TxtBox2-6=de geselecteerde Rbtn*TxtBox1.
Als er geen enkele Rbtn geselecteerd is, dan verschijnt in TxtBox7 een 0.

-Jouw uitleg
Wat ik niet begreep uit jouw uitleg:

1) je wilt een bepaald getal weergeven in het bovenste tekstvak.
Stel dat je dit tekstvak TxtBox1 hebt genoemd en dat je voor het in te voeren getal de variabele Getal declareert.
Je definieert dan: Getal=InputBox("Geef een getal op:").
Hiermee geef je via een invoervenster de waarde van Getal op.
Om deze waarde in het bovenste tekstvak weer te geven gebruik je de opdracht TxtBox1.Text=Getal.

2) Stel dat het keuzerondje met de naam RBtn1 is geselecteerd.
Deze eigenschap wordt in Visual Basic weergegeven als RBtn1.Checked=True.

(Misschien is het door mijn versie van access (2003) maar 'Checked' kent hij niet.)

3) Je definieert nu een Boolean variabele Aangeklikt.

(Boolean? Ligt misschien voor de hand maar dat heb ik nog niet gezien in school..)
Met citaat reageren
Oud 12-04-2008, 17:01
mathfreak
Avatar van mathfreak
mathfreak is offline
Ik ging er van uit dat je werkte in Visual Basic, maar omdat je aangeeft dat je Access 2003 gebruikt begrijp ik dat je in Visual Basic for Applications (VBA) werkt. In dat geval gebruik je de eigenschap Enabled in plaats van Checked. Een ander verschil is dat een keuzerondje in Visual Basic de objectnaam RadioButton heeft, en in VBA de objectnaam OptionButton.
Een Boolean variabele is een variabele die slechts 2 waarden kan aannemen: True of False. In dit geval ligt het gebruik van een Boolean variabele voor de hand omdat een keuzerondje of een selectievakje maar 2 toestanden kent: wel of niet geselecteerd.
__________________
"Mathematics is a gigantic intellectual construction, very difficult, if not impossible, to view in its entirety." Armand Borel
Met citaat reageren
Oud 12-04-2008, 17:40
Lothar
Lothar is offline
ok, nu begrijp ik het
nu gebeurt er nog 1 vreemd ding.

code:

If Opt1.Enabled = True Then
TxtBox7 = TxtBox1 * 23
ElseIf Opt2.Enabled = True Then
TxtBox7 = TxtBox1 * 30
End If

Dit is een klein voorbeeldje maar het systeem kan ik uitleggen. Hetzelfde gebeurt als ik opt1 of opt2 kies. Hij doet altijd *23
weet jij waarom?
Met citaat reageren
Oud 12-04-2008, 18:28
mathfreak
Avatar van mathfreak
mathfreak is offline
Citaat:
ok, nu begrijp ik het
nu gebeurt er nog 1 vreemd ding.

code:

If Opt1.Enabled = True Then
TxtBox7 = TxtBox1 * 23
ElseIf Opt2.Enabled = True Then
TxtBox7 = TxtBox1 * 30
End If

Dit is een klein voorbeeldje maar het systeem kan ik uitleggen. Hetzelfde gebeurt als ik opt1 of opt2 kies. Hij doet altijd *23
weet jij waarom?
Je moet in TxtBox7 de waarde 0 krijgen als het goed is. In ieder geval moet je de uitdrukking TxtBox.Text=Waarde gebruiken om het tekstvak TxtBox met een bepaalde waarde te vullen.
Laat ik voor de zekerheid maar even de volledige code vermelden, zoals die er uit zou moeten zien:
Code:
Dim Getal As Integer, Aangeklikt As Boolean
Getal=InputBox("Geef een getal op:") 'getal ingeven via invoervenster
TxtBox1.Text=Getal 'getal weergeven in bovenste tekstvak
Select Case Aangeklikt
         Case Aangeklikt=Opt1.Enabled 
         If Aangeklikt=True Then
         TxtBox2.Text=Getal*21.6
         End If
         Case Aangeklikt=Opt2.Enabled
         If Aangeklikt=True Then
         TxtBox3.Text=Getal*52.8
         End If
         Case Aangeklikt=Opt3.Enabled
         If Aangeklikt=True Then
         TxtBox4.Text=Getal*68.4
         End If
         Case Aangeklikt=Opt4.Enabled
         If Aangeklikt=True Then
         TxtBox5.Text=Getal*87
         End If
         Case Aangeklikt=Opt5.Enabled
         If Aangeklikt=True Then
         TxtBox6.Text=Getal*58.6
         End If
         Case Else 'als geen enkel keuzerondje geselecteerd is
         TxtBox7.Text=0
         End Select
__________________
"Mathematics is a gigantic intellectual construction, very difficult, if not impossible, to view in its entirety." Armand Borel
Met citaat reageren
Oud 12-04-2008, 18:51
Lothar
Lothar is offline
2 zaken nu:

1: als ik jouw code laat lopen krijg ik een foutmelding en komt dit in het geel te staan: TxtBox1.Text = Getal 'getal weergeven in bovenste tekstvak

2: Die inputbox is eigenlijk niet nodig voor het resultaat dat ik wil.
ieder rondje komt overeen met een getal. Als het rondje geselecteerd is gaat TxtBox1*het getal van het geselecteerde rondje.

(bedankt voor je tijd en moeite)
Met citaat reageren
Oud 13-04-2008, 12:10
mathfreak
Avatar van mathfreak
mathfreak is offline
Citaat:
2 zaken nu:

1: als ik jouw code laat lopen krijg ik een foutmelding en komt dit in het geel te staan: TxtBox1.Text = Getal 'getal weergeven in bovenste tekstvak

2: Die inputbox is eigenlijk niet nodig voor het resultaat dat ik wil.
ieder rondje komt overeen met een getal. Als het rondje geselecteerd is gaat TxtBox1*het getal van het geselecteerde rondje.

(bedankt voor je tijd en moeite)
Je hebt iets nodig om het getal in te geven waar je mee begint, vandaar dus de opdracht met InputBox. Waarschijnlijk is de foutmelding ontstaan doordat de waarde in het invoervenster niet als een getal, maar als een string wordt opgevat. Als je Getal=InputBox("Geef een getal op:") wijzigt in Getal=Val(InputBox("Geef een getal op:")) treedt daar in ieder geval geen fout meer op, omdat Getal dan inderdaad als een getal wordt opgevat.
Als je zonder invoervenster wilt werken veronderstel ik dat je het eerste tekstvak selecteert en daar zelf de waarde in typt waarmee je wilt werken. In dat geval kun je gewoon de instructie Getal=TxtBox1.Text gebruiken.
__________________
"Mathematics is a gigantic intellectual construction, very difficult, if not impossible, to view in its entirety." Armand Borel
Met citaat reageren
Oud 13-04-2008, 12:26
Lothar
Lothar is offline
mijn code nu:

Code:
 Private Sub CmdBerekenen_Click()
Dim Getal As Integer, Aangeklikt As Boolean
Getal = TxtBox1.Text
Select Case Aangeklikt
         Case Aangeklikt = Opt1.Enabled
         If Aangeklikt = True Then
         TxtBox2.Text = Getal * 21.6
         End If
         Case Aangeklikt = Opt2.Enabled
         If Aangeklikt = True Then
         TxtBox3.Text = Getal * 52.8
         End If
         Case Aangeklikt = Opt3.Enabled
         If Aangeklikt = True Then
         TxtBox4.Text = Getal * 68.4
         End If
         Case Aangeklikt = Opt4.Enabled
         If Aangeklikt = True Then
         TxtBox5.Text = Getal * 87
         End If
         Case Aangeklikt = Opt5.Enabled
         If Aangeklikt = True Then
         TxtBox6.Text = Getal * 58.6
         End If
         Case Else
         TxtBox7.Text = 0
         End Select
End Sub
wat klopt nu nog niet?
Met citaat reageren
Oud 13-04-2008, 12:43
ILUsion
Avatar van ILUsion
ILUsion is offline
Volgens mij klopt die Enabled niet, hoor. In zowat alle omgevingen (Delphi, VB, Java, ...) staat Enabled voor het al dan niet bruikbaar zijn van dat vakje (als het grijs is, staat enabled op false). Maar ik heb hier geen Office staan om mee na te kijken, maar het zou me echt verbazen dat het enabled zou zijn. Om dat na te gaan heb je normaal iets als een Object Inspector (Delphi-term): een venstertje waarmee je alle eigenschappen van een visueel object kan bekijken en dus ook naam, caption (weergavetekst) enzo kan aanpassen, daar staat dan ook zoiets als Checked bij.

Maar goed, wat volgens mij niet klopt aan je code: je controleert nu op Aangeklikt, welke een boolean is, maar je weet bij het begin niet of die boolean true/false is in feite. Je bent dus in het wilde weg aan het controleren. Wat ik zou proberen, als je ook nog steeds die case wilt:

Private Sub CmdBerekenen_Click()
Dim Getal As Integer

Code:
Getal = TxtBox1.Text

Select Case True
    Case Opt1.Enabled
        TxtBox2.Text = Getal * 21.6
    Case Opt2.Enabled
        TxtBox3.Text = Getal * 52.8
    Case Opt3.Enabled
        TxtBox4.Text = Getal * 68.4
    Case Opt4.Enabled
        TxtBox5.Text = Getal * 87
    Case Opt5.Enabled
        TxtBox6.Text = Getal * 58.6
    Case Else
        TxtBox7.Text = 0
End Select

End Sub
Nu moet ik wel toegeven dat mijn Basic-skills heel erg roestig zijn, maar het lijkt me nogal stom om in een CASE-structuur bij elke case weer je variabele te moeten herhalen (het heeft in sommige gevallen wel nut natuurlijk, maar voor een vergelijking niet). Dus misschien dat mijn code daarop vastloopt. Anders: misschien loopt hij vast op het feit dat hij bij die Select Case True i.p.v. True een variabele wilt, dan moet je hem ook maar die boolean Aangeklikt aanmaken en die instellen op True.

Een andere tip die ik geef: probeer wat te letten op je indentatie (witruimte voor je eigenlijke code), zoals bij mij. Ik weet dat VB er niet zo op let, en dat het waarschijnlijk niet aangeleerd wordt, maar door erop te letten, maak je je code VEEL leesbaarder, en hoe leesbaarder code, hoe makkelijker je er fouten uit kan halen omdat je de structuur direct ziet in plaats van dat je alles moet lezen.

Waar je inderdaad ook op moet letten is het eventuele omzetten van het ene type naar het andere, al zou Basic dat misschien wel zelf doen; dat weet ik nu echt niet meer. In de meeste andere talen is het trouwens wel noodzakelijk (dan moet je overal waar die .Text enzo staat, die String nog door Val( ) gooien, zoals mathfreak al gezegd heeft).
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
Met citaat reageren
Oud 13-04-2008, 13:04
Lothar
Lothar is offline
Bedankt,
ik voegde nu jouw code in maar hij gaf een foutmelding bij: Getal = TxtBox1.Text
Dat kon ik verhelpen door overal de .Text weg te laten.
Misschien komt het door de .Text weg te laten maar nu doet hij altijd TxtBox1*21.6. Hij houdt geen rekening met wat er geselecteerd is nu...
Met citaat reageren
Oud 14-04-2008, 17:26
ILUsion
Avatar van ILUsion
ILUsion is offline
Dat lijkt me dan ook het idee van die Enabled: enabled is in elke grafische omgeving die ik ken: het al dan niet grijs zijn van het vakje. Of het aangevinkt is, dat wordt meestal aangegeven door checked, of value, of iets dergelijks. Maar ik heb hier geen Office staan, DUS dat moet je zelf zoeken, met welk veld je dat doet.

En volgens mij moet die .Text er wel bij, tenzij je heel rare dingen gedaan hebt. De reden is dat en TxtBox geen getal is, maar een TextBox en de waarde die ingevuld is, normaal dus met iets als .Text opgeroepen zou moeten worden, lijkt me; maar ik kan me natuurlijk vergissen (in dat geval daalt VB in mijn achting).
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
Met citaat reageren
Oud 14-04-2008, 17:29
Lothar
Lothar is offline
Citaat:
Dat lijkt me dan ook het idee van die Enabled: enabled is in elke grafische omgeving die ik ken: het al dan niet grijs zijn van het vakje. Of het aangevinkt is, dat wordt meestal aangegeven door checked, of value, of iets dergelijks. Maar ik heb hier geen Office staan, DUS dat moet je zelf zoeken, met welk veld je dat doet.

En volgens mij moet die .Text er wel bij, tenzij je heel rare dingen gedaan hebt. De reden is dat en TxtBox geen getal is, maar een TextBox en de waarde die ingevuld is, normaal dus met iets als .Text opgeroepen zou moeten worden, lijkt me; maar ik kan me natuurlijk vergissen (in dat geval daalt VB in mijn achting).
ok, kzal eens zoeken wat die enabled zou kunnen zijn
maar ik vrees inderdaad dat VB in je achting zal dalen. van .Text heb ik niks gezien op school..
Met citaat reageren
Oud 14-04-2008, 17:48
Lothar
Lothar is offline
JA!!!!
nu werkt het!

Code:
 Private Sub CmdBerekenen_Click()

Getal = TxtBox1

Select Case True
    Case Opt1 = True
        TxtBox2 = Getal * 21.6
    Case Opt2 = True
        TxtBox3 = Getal * 52.8
    Case Opt3 = True
        TxtBox4 = Getal * 68.4
    Case Opt4 = True
        TxtBox5 = Getal * 87
    Case Opt5 = True
        TxtBox6 = Getal * 58.6
    Case Else
        TxtBox7 = 0
End Select

End Sub
bedankt ilusion en mathfreak! jullie hebben me beide fantastisch geholpen!
Met citaat reageren
Oud 14-04-2008, 21:00
Lothar
Lothar is offline
Ow

wat is:
fout 94 tijdens uitvoering:
Ongeldig gebruik van Null


alles werkte, nu krijg ik dit?
Met citaat reageren
Oud 14-04-2008, 21:24
ILUsion
Avatar van ILUsion
ILUsion is offline
Null is een waarde die geen waarde is, het komt eigenlijk neer op de computer die zegt 'ik weet niet waar dat object/dat item/... staat' (dus als je bv. een object, item, ... gebruikt vanuit een variabele, maar je hebt nog geen item in die variabele gestoken).

Bv. die TxtBoxen moet je eerst grafisch aanmaken, maar als je er bv. eentje wegdoet, en toevallig selecteer je het bijhorende vinkje, dan zal hij een NULL geven: hij vindt wel de variabele TxtBoxN, maar daarin zit er geen TxtBox, die variabele is leeg, oftewel NULL. (andere talen gebruiken soms ook NIL: not in list).
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 10:25.