Visual Basic 6.0 vraagje

Pagina: 1
Acties:

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Hoi, ik ben aan de slag gegaan met visual basic 6.0 Entreprise en ik heb een vraagje..

Ik wil op een textvak een click event gooien maar dit wordt niet toegelaten!
Dit is de code die ik heb (Met dank aan Razorx)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Text1_Change()

Text2.Text = Round(Text1.Text * 2.20371, 2)

End Sub
-------------------------
Private Sub Text3_Change()
    
Text4.Text = Round(Text3.Text / 2.20371, 2)

End Sub
-------------------------
Private Sub Command3_Click()
    
Text7.Text = Round((Text6.Text / 2.20371) - Text5.Text, 2)

End Sub

Nu wil ik dus deze click event toepassen:
code:
1
2
3
4
5
6
7
8
9
10
Private Sub Text1_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""

End Sub

Dit pikt ie niet en ik krijg de foutmelding Type mismatch

Hoe kan ik ervoor zorgen dat het wel werkt?

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

probeer i.p.v het click event eens de GotFocus event

  • Kix@$$
  • Registratie: December 2001
  • Laatst online: 16:32
bij mij doet een click event het gewoon, zit de fout niet ergens anders in?

Bewerkt:
Ik zie het al, als jij doet:
Text3.Text / 2.20371
dat kan officieel niet, omdat het een string is
VB bouwt van de string dat een getal.
Als VB een lege waarde als text heeft, dan kan hij daar geen getal van maken, en probeert hij dus een String te delen door een getal.

Oplossing:

maak van:
Text1.Text * 2.20371
en alle andere berekeningen:
Val(Text1.Text) * 2.20371

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Op vrijdag 21 december 2001 18:06 schreef stylee het volgende:
probeer i.p.v het click event eens de GotFocus event
Dan krijg ik precies dezelfde foutmelding..klik ik op debug dan verwijst ie hier naar toe:

Afbeeldingslocatie: http://home.wanadoo.nl/entrefice/GoT/fout.jpg

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


Verwijderd

Doe eens

Text2.Text = Round(Cdbl(Text1.Text) * 2.20371, 2)

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Op vrijdag 21 december 2001 18:06 schreef Born2Prog het volgende:
....

Oplossing:

maak van:
Text1.Text * 2.20371
en alle andere berekeningen:
Val(Text1.Text) * 2.20371
Je bedoeld:
code:
1
Val(Text2.Text) = Round(Text1.Text * 2.20371, 2)

Ook dan krijg ik een foutmelding...

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


  • eXistenz
  • Registratie: Juni 2001
  • Laatst online: 29-08 10:35
Dit werkt ook :)

Text2.Text = Round(Val(Text1.Text) * 2.20371, 2)

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Op vrijdag 21 december 2001 18:12 schreef GrAviTy het volgende:
Doe eens

Text2.Text = Round(Cdbl(Text1.Text) * 2.20371, 2)
Heb het even geprobeerd, krijg ook een foutmelding waarbij ie verwijst naar:
Text2.Text = Round(Cdbl(Text1.Text) * 2.20371, 2)

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


Verwijderd

Der zit toch geen text in Text2.Text hé, alleen maar getallen, want als dit niet zo is kan hij dat niet casten, dwz omzetten van het ene datatype (string) naar de andere (double,long, etc getallen dus)

Verwijderd

Als dit niet het geval is probeer dan eens
Text2.Text = Cstr(Round(Cdbl(Text1.Text) * 2.20371, 2))

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Op vrijdag 21 december 2001 18:17 schreef GrAviTy het volgende:
Der zit toch geen text in Text2.Text hé, alleen maar getallen, want als dit niet zo is kan hij dat niet casten, dwz omzetten van het ene datatype (string) naar de andere (double,long, etc getallen dus)
Nee text2.text is leeg..daar worden alleen maar die getallen ingevuld die uitgerekend moeten worden.

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Op vrijdag 21 december 2001 18:15 schreef eXistenz het volgende:
Dit werkt ook :)

Text2.Text = Round(Val(Text1.Text) * 2.20371, 2)
Dit werkt alleen bij de click event van text1.text :)
Maar bij de click event van text3.text krijg ik foutmelding..heeft dat te maken met het gedeeld door teken?

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


  • eXistenz
  • Registratie: Juni 2001
  • Laatst online: 29-08 10:35
zugd probeer dit nou gewoon ;)

Text2.Text = Round(Val(Text1.Text) * 2.20371, 2)


Text4.Text = Round(Val(Text3.Text) / 2.20371, 2)
?

werkt hier gewoon...

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Op vrijdag 21 december 2001 18:22 schreef eXistenz het volgende:
zugd probeer dit nou gewoon ;)

Text2.Text = Round(Val(Text1.Text) * 2.20371, 2)
Die doet het ja..maar nu lukt het niet bij text3.text

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


Verwijderd

En daar hebt je dan ook gedaan
* Text7.Text = Round((Val(Text6.Text) / 2.20371) - Val(Text5.Text), 2)

* Der zitten waarden in Text5.Text en Text6.Text, dus GEEN LEEG veld

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Op vrijdag 21 december 2001 18:24 schreef GrAviTy het volgende:
En daar hebt je dan ook gedaan
* Text7.Text = Round((Val(Text6.Text) / 2.20371) - Val(Text5.Text), 2)

* Der zitten waarden in Text5.Text en Text6.Text, dus GEEN LEEG veld
Deze klopt nu ook...thnx :)
Dit is de code die ik nu heb
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Private Sub Text1_Change()

Text2.Text = Round(Val(Text1.Text) * 2.20371, 2)

End Sub
-------------------------------
Private Sub Text1_GotFocus()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""
End Sub
-------------------------------
Private Sub Text3_Change()
    
Text4.Text = Round(Val(Text3.Text / 2.20371, 2))

End Sub
-------------------------------
Private Sub Text3_GotFocus()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""
End Sub
-------------------------------
Private Sub Command3_Click()
   
Text7.Text = Round((Val(Text6.Text) / 2.20371) - Val(Text5.Text), 2)

End Sub

Waar ie nu nog over struikelt is text3.text als ik daar een getal invul krijg ik meteen foutmelding en verwijst ie naar Text4.Text = Round(Val(Text3.Text / 2.20371, 2))

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


Verwijderd

Je moet de "Val()" rond de Text3.Text plaatsen:

Text4.Text = Round(Val(Text3.Text) / 2.20371, 2)

  • eXistenz
  • Registratie: Juni 2001
  • Laatst online: 29-08 10:35
het is

Text4.Text = Round(Val(Text3.Text) / 2.20371, 2)

haakje staat verkeerd :)

[GrAviTy was me voor :)]

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Super!
Hij werkt perfect nu!
Maar misschien is het ook handig als:
code:
1
2
3
4
5
Private Sub Command3_Click()
   
Text7.Text = Round((Val(Text6.Text) / 2.20371) - Val(Text5.Text), 2)

End Sub

ook in een change event kan, iemand enig idee hoe dit moet??

-edit-
ff uitleg..
Afbeeldingslocatie: http://home.wanadoo.nl/entrefice/GoT/euro.jpg
1e textvak = text5
2e textvak = text6
3e textvak = text7
-edit-

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Dit is de juiste code dus:
code:
1
Text7.Text = Round(Val(Text6.Text) / 2.20371, 2) - (Val(Text5.Text))

Zelf uitgevogeld! :)

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


Verwijderd

Erik, in de VAL-functie zitten nogal wat rare dingen, zie de MSDN-website van microsoft. Microsoft raadt het gebruik van VAL dan ook af.

Je kunt beter iets met een if-je programmeren:
code:
1
2
3
4
5
6
t = text1.text
if IsNumeric(t) then
   text7.text = Round(CDbl(t) * 2.20371, 2)
else
   text7.text = ""
end if

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Op zaterdag 22 december 2001 22:22 schreef Thargol het volgende:
Erik, in de VAL-functie zitten nogal wat rare dingen, zie de MSDN-website van microsoft. Microsoft raadt het gebruik van VAL dan ook af.

Je kunt beter iets met een if-je programmeren:
code:
1
2
3
4
5
6
t = text1.text
if IsNumeric(t) then
   text7.text = Round(CDbl(t) * 2.20371, 2)
else
   text7.text = ""
end if
Bedankt voor de tip! :)
Waarom is de code die jij geeft beter?

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


Verwijderd

Mijn code is beter, ahum, omdat daar het val commando niet in zit. Zie o.a http://msdn.microsoft.com/vbasic/technical/01pasttips.asp#4-30-01 en http://msdn.microsoft.com/vbasic/technical/01pasttips.asp#7-23-01 voor bugs in het val-commando.

Ik zie ook wel dat de versie met 'val' korter is. Maar je moet de gebruiker altijd tegen zichzelf beschermen en zorgen dat zijn invoer niet kan leiden tot ongewenste foutmeldingen etc.

Als het echt helemaal netjes wilt maken. Zorg je ervoor dat je in de textboxen het keypress event afvangt en alle 'illegale' karakters blokkeert. Zodat de gebruiker dus geen letters enzo kan intypen. Wat ook wel aardig werkt is het volgende stukje code om text-veld voor cijfer invoer:
code:
1
2
3
4
5
6
7
private sub text1_onchange()
  if IsNumeric(text1.text) then
    label1.color = vbblack
  else
    label1.color = vbred
  end if
end sub

Dus als de gebruiker iets fout invult het label er voor rood maken om aan te geven dat het fout is.

Een paar regeltjes voor een goede GUI (grafische user interface):
- Voorkom foute invoer van de gebruiker als dat kan.
- Geef goed aan wat er fout is, met kleuren en/of met status-meldingen. Geen msgbox!
- Disable knoppen die niet gebruikt kunnen worden.
- Aap GUI's na, uit bv windows of word. Als je programma lijkt op iets wat de gebruiker al kent zal hij het sneller snappen.

  • --Erik--
  • Registratie: Juni 2001
  • Niet online
Bedankt voor de tips, ik ga meteen ff klooien.. :)

Hobbymatige blowerdoortest enthousiast (Retrotec) 💨. Interessant voor jouw huis? DM me maar!


Verwijderd

Wat ik nou niet snap, waarom maak je niet gewoon effe een
paar variabele aan?

Ik heb niet zoveel verstand van VB wat wiskundig programmeren
betreft dus die CDbl zeggen me helemaal niks.

Maar als je gewoon 3 variabelen maakt
code:
1
2
3
Dim a as float
Dim b as float
Dim c as float

wel float houden want integere waarden kan je niet delen
zonder te casten

maar dan krijg je toch zoiets als:
code:
1
2
3
Text1.Text = a
b=a*2.20371
Text2.Text = b

Volgens mij ben je dan van die string errors af, omdat
je text vakjes alleen maar variabelen printen en lezen
die je ook weer gebruikt

Correct me if i'm wrong :?
Pagina: 1