Toon posts:

[VB.NET] Waardes tussen textboxen omrekenen *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb twee tekstvelden en 1 knop. De knop moet, wanneer tekstbox1 (txt1) leeg is, de waarde van tekstbox 2 vermenigvuldigen met 2,2 en deze uitkomst in tekstbox1 zetten.

Andersom geldt het net zo. Wanneer tekstbox2 (txt2) leeg is, zal de waarde (via de knop) van tekstbox 1 zich delen door 2,2 en deze uitkomst in tekstbox2 zetten.

Het probleem is dat hij niet omrekent, misschien gebruik ik verkeerde gegevenstypes, maar dan krijg ik foutmelding. Kan iemand mij helpen?


Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdReken.Click

cmdReken.Enabled = True
Dim x As String
Dim y As String
x = Val(txt1.Text)
y = Val(txt2.Text)

If x = "" Then
x = Str(Val(y) * Val(2.2))
Else
If y = "" Then
y = Str(Val(x) / Val(2.2))

End If
End If

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:33
Je gebruikt VB functies ipv VB.NET functies.

Kijk eens naar de Convert class, en haar (static/shared) methods
Convert.ToString
Convert.ToDouble
Convert.ToInt32
...

Controleren op lege strings doe je ook beter door te checken of de lengte van een string kleiner of gelijk is aan 0

https://fgheysels.github.io/


  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 21-05-2024
Gebruik numerieke velden om mee te rekenen (en geen stringvelden). Als je die weer in een tekstveld wilt zetten gebruik je de ToString functie van dat numerieke veld.

[ Voor 0% gewijzigd door PaulZ op 04-11-2004 17:21 . Reden: Weer te laat.... ]

Vlinders moet je volgen, niet vangen...


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 17-05 12:43

TrailBlazer

Karnemelk FTW

mischien is de foutmelding wel handig. Ik ben geen vb expert totaal niet maar rekenen met stringsgaat dat goed??. BTW wie wil er tegenwoordig nog een eurocalculator schrijven. Klinkt een beetje als huiswerk

Verwijderd

Topicstarter
Punt is dat ik geen foutmelding krijg zoals de code er nu staat.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 21-05-2024
Verwijderd schreef op 04 november 2004 @ 17:23:
Punt is dat ik geen foutmelding krijg zoals de code er nu staat.
Zet die code dan in een Try...Catch blok (zie helptekst)

[ Voor 3% gewijzigd door PaulZ op 04-11-2004 17:25 ]

Vlinders moet je volgen, niet vangen...


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:33
Zorg er eens voor dat je in VB.NET strong typed werkt.

Zorg er ook voor dat je de inhoud van die textboxen cast/convert naar een numerieke waarde, en reken daar mee.

Een Try/Catch blok heb je niet nodig om de foutboodscahppen te zien, dat heb je enkel nodig als je ze wilt afhandelen. (Wat ook wel 'best practice' is natuurlijk)

https://fgheysels.github.io/


Verwijderd

Topicstarter
okay heb die catch geprobeerd bij x, y = integer.

Krijg een foutmelding bij de de eerste if statement al. De if statement is fout?!

[ Voor 12% gewijzigd door Verwijderd op 04-11-2004 18:11 ]


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:56

mulder

ik spuug op het trottoir

waarschijnlijk vergelijk je nu een integer met een lege string, maar waarschijnlijk word dit een gok-wat-het-probleem-is-zonder-enige-nuttige-informatie topic.

oogjes open, snaveltjes dicht


  • Blizard
  • Registratie: September 2001
  • Niet online
Het is zoals whoami zegt meer vb6 dan .NET
Je kan even googlen naar de verschillen tussen deze twee en je zal zien dat er wat nieuwere functies/manieren van werken zijn. Ik zou testen op de lengte van de string ipv = "". Ook het casten volgens de .NET manier doen (zie ook DirectCast). En zet anders ook even Option Strict/Explicit aan, .. krijg je minder onverwachte fouten.

Maar bijkomstige tips :
Geef je functies/vars/componenten ... duidelijke namen. Nu gaat het maar over 20 regels code, maar lijkt mee een aangename gewoonte om aan te nemen.

  • bat266
  • Registratie: Februari 2004
  • Laatst online: 19-05 19:47
Ik ben in een behulpzame bui zoiets zou het moeten zijn heb alleen alle exceptions niet afgevangen
code:
1
2
3
4
5
6
7
 cmdReken.Enabled = True

If text1.text = "" Then
   text2.text  = cstr( cint(text1.text) *2,2 )
ElseIf text2.text  = "" Then
  text1.text=cstr( cint  (text2.text) / 2,2)
End If

[ Voor 6% gewijzigd door bat266 op 04-11-2004 18:33 ]

Better to remain silent and be thought a fool then to speak out and remove all doubt.


  • Blizard
  • Registratie: September 2001
  • Niet online
Of zoiets

code:
1
2
3
4
5
6
7
8
9
10
Dim intX As Double
Dim intY As Double

    If text1.Text.Length > 0 And IsNumeric(text1.Text) Then
      intX = CType(text1.Text, Double) * 2.2
      text2.Text = CType(intX, String)
    ElseIf text2.Text.Length > 0 And IsNumeric(text2.Text) Then
      intY = CType(text2.Text, Double) / 2.2
      text1.Text = CType(intY, String)
    End If

Er was een verschil tussen DirectCast en CType, maar ik denk dat het in dit geval weinig zal uitmaken. Wat je nu juist in welke variabele gaat steken hang volgens mij ook af van de rest van het programma.

Verwijderd

Topicstarter
Thnx for the help. Hij werkt iig.

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021

Haploid

Doh!

Dit stuk gaat fout:

code:
1
2
3
4
5
Dim x As String
...
x = Val(txt1.Text)
...
If x = "" Then


Als txt1.Text gelijk is aan "", dan zal Val(txt1.Text) 0 (nul) opleveren. Als je dat in een string probeert te proppen, dan wordt dat "0". Dus If x = "" zal niet gebeuren. Denk ik. Ik heb geen VB bij de hand. ;)

Hey, I came here to be drugged, electrocuted and probed, not insulted.

Pagina: 1