![]() |
[INF]Help gezocht (Visual Basic)
Ik ben dus een programma aan het schrijven in Visual Basic.
uitleg: http://i276.photobucket.com/albums/k...choelieren.jpg (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 :) |
Ik heb je code als volgt aangepast:
Code:
Private Sub CmdBerekenen_Click() |
Werkt het
Code:
code blok EDIT: Wel dus... Da's misschien wel handig als je grotere lappen code gaat laten zien. *suggestie doet* |
Citaat:
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? |
Citaat:
|
Citaat:
|
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 Code:
Select Case Aantal Code:
Case Else |
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 |
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..) |
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. |
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? |
Citaat:
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 |
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) |
Citaat:
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. |
mijn code nu:
Code:
Private Sub CmdBerekenen_Click() |
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 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). |
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... |
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). |
Citaat:
maar ik vrees inderdaad dat VB in je achting zal dalen. van .Text heb ik niks gezien op school.. |
JA!!!!
nu werkt het! :D:D:D Code:
Private Sub CmdBerekenen_Click() |
Ow :(
wat is: fout 94 tijdens uitvoering: Ongeldig gebruik van Null alles werkte, nu krijg ik dit? :( |
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). |
Alle tijden zijn GMT +1. Het is nu 20:40. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.