Archief - [PROG]VB optellen van 2 variabelen gaat niet?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

BLUTCH 26

Legacy Member
Goeie dag iedereen,

Ik heb hier een bijzonder irritant probleempje: Ziehier de simpele VB code
Private Sub cmdBereken_Click()
een = txtBox1.Text
twee = txtBox2.Text
drie = een + twee ---> !!!!!:angry:
txtBox3.Text = drie
End Sub

Ik heb 2 textboxen waarin ik een getal wil typen (user invoer). Het resultaat van de som wordt dan in de derde textbox getoond.
MAAR: als je het programma runt en 2 willekeurige waarden ingeeft gebeurt er dit: 1 +1 = 11 ; 2 + 4 = 24, 3+9= 39......
Verander ik het plusteken door een min, maal, of deling, dan berekent hij wel de juiste waarde.... Hoe kan dat nu????

Kan iemand mij vertellen wat hier gaande is?
Thanks
Blutch

Kheos

Legacy Member
is da geen basiskennis?
hoe weet vb nu wat ge in die boxen invult? kunnen letters zijn, cijfers, telefoonnummer(!)... en 2 woorden optellen, dat gaat dus niet. ge moet de willekeurige tekenreek '123' omzetten naar het getal 123. casten heet dit, en ge zou nu toch al een eind op weg moeten zijn. waarom het met andere tekens(/,*,-...) wel lukt? omdat vb veel te vriendelijk is, daarom

InFerNo

Legacy Member
Code:
[b]Option Explicit[/b]
Private Sub cmdBereken_Click()

[b]dim een as integer
dim twee as integer
dim drie as integer[/b]

een = txtBox1.Text
twee = txtBox2.Text
drie = een + twee  '---> !!!!!:angry: 
txtBox3.Text = drie
End Sub

Ge moet uw variabelen declareren.
Dit valt te vermijden door uw gehele code te beginnen met Option Explicit (helemaal bovenaan het scherm typen, dit moet ge maar 1 keer doen)
Die Option Explicit is niet verplicht, maar voorkomt zo'n problemen...

Kheos

Legacy Member
ja, maar lost geen reet op. of zou toch niet mogen. ook al is uw variabele gedeclareert als integer, niets verplicht nen gebruiker om nen integer in te vullen in die texboxen.
casten is de oplossing en niet declareren(ook al is dat ook wel sterk aan te raden)

InFerNo

Legacy Member
casten casten casten

steek er ineens een tekencontrole adhv ASCII en keypresses in, en een debugsysteem, en ...
Het is een simpel programma dat 2 getallen moet optellen :P
dit zal het wel oplossen, which it does..
ge moet er gewoon geen letters intypen of getallen die groter dan een integer zijn of komma getallen


works like a charm
Het telt getallen op
http://img363.imageshack.us/img363/3339/deleteasapan7.jpg

Enygm

Legacy Member
Probeer eens met:

dim vntEen as variant
dim vntTwee as variant
dim dblEen as double
dim dblTwee as double

vnteen = txt1.text
vnttwee = txt2.text

if isnumeric(vnteen)= false or isnumeric(vnttwee) = false then exit sub

dbleen = cdbl(vnteen)
dbltwee = cdbl(vnttwee)

txt3.text = dbleen + dblTwee

InFerNo

Legacy Member
Voor iemand da 2 getalle leert optelle komt dit best wel.. 'hard' over :p

Waarom geen on error goto :roll: :p

Met varianten werken is niet goe voor de snelheid, voor dit kleine programma nauwelijks op te merken, maar als ge veel varianten gebruikt in een 'gigantisch' project, dan gaat uw programma wel veel trager gaan denk ik :p

mss dit eens bekijken:
http://www.aivosto.com/vbtips/stringopt.html

No variants please

It's a simple thing but often overlooked. All variables, parameters and functions should have a defined data type. If the data is a string, then the data type should be defined as string. If you don't give a data type, you're using a variant. The variant data type has its uses but not in string processing. A variant means performance loss in most cases.

PA So add those Option Explicit statements now and Dim all variables with a decent data type. Review your functions and ensure that they define a return data type.

het maakt mss ni uit voor dit klein programmatje, maar jong geleerd is oud gedaan ;)

trouwens.
Enygm zei:
if not isnumeric(vnteen) or not isnumeric(vnttwee) then exit sub

die if is zo properder imo :p

TiZon

Legacy Member
anders zet je er nog een keypress ascii-controle op, dan kan er niets meer fout gaan :p

R3Deye

Legacy Member
!nFy zei:
Code:
[b]Option Explicit[/b]
Private Sub cmdBereken_Click()

[b]dim een as integer
dim twee as integer
dim drie as integer[/b]

een = txtBox1.Text
twee = txtBox2.Text
drie = een + twee  '---> !!!!!:angry:
txtBox3.Text = drie
End Sub

Ge moet uw variabelen declareren.
Dit valt te vermijden door uw gehele code te beginnen met Option Explicit (helemaal bovenaan het scherm typen, dit moet ge maar 1 keer doen)
Die Option Explicit is niet verplicht, maar voorkomt zo'n problemen...

hmm, uw integer declarations zijn ook overbodig hoor als ge dat als oplossing geeft zonder een deftige error check, herleid het dan ineens tot;
Code:
Private Sub cmdBereken_Click()
    txtBox3.Text = CInt(txtBox1.Text) + CInt(txtBox2.Text)
End Sub

Toch is het het beste dat hij ineens error traps toevoegd en dit leert. Waarom?
!nFy zei:
...jong geleerd is oud gedaan ;)...
Daarom.

Kheos

Legacy Member
R3Deye zei:
hmm, uw integer declarations zijn ook overbodig hoor als ge dat als oplossing geeft zonder een deftige error check, herleid het dan ineens tot;
Code:
Private Sub cmdBereken_Click()
    txtBox3.Text = CInt(txtBox1.Text) + CInt(txtBox2.Text)
End Sub

Toch is het het beste dat hij ineens error traps toevoegd en dit leert. Waarom?

Daarom.
casten dus, zoals ik al zei

jodeman

Legacy Member
casten is betere gewoonte denk ik
off topic : 13 posts voor het optellen van twee vars? Het is ver gekomen met dir forum ;).

diablo_732

Legacy Member
Kheos zei:
casten dus, zoals ik al zei

Het kan zijn dat het allebei als hetzelfde beschouwd mag worden, maar ik verkies toch om een onderscheid te maken tussen casten en converteren...

Enygm

Legacy Member
Nog een kleine bemerking:

deze code:
dim een as integer
dim twee as integer
dim drie as integer

een = txtBox1.Text
twee = txtBox2.Text
drie = een + twee
txtBox3.Text = drie

bevat nog een kleine mogelijke fout:
Als een en twee de waarde 32000 hebben, dan zal het statement
drie = een + twee een overflow genereren

=> sowieso error-handling want uiteindelijk weet je niet wat de gebruiker gaat intikken (tekst, niets, te grote getallen, kommagetallen)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan