Toon posts:

[VB] not empty

Pagina: 1
Acties:
  • 127 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
*** Visual Studio 2005 ***

Hallo,

Ik heb 2 textboxen. Bij textbox a voer je de meters in, en in textbox b wordt deze omgerekend naar voet (feet). Dit werkt op zich prima. Wanneer ik het programma run, en ik de tekst (nummeriek) bij textbox a weghaal krijg ik onmiddelijk een foutmelding:

"Conversion from string "" to type 'Single' is not valid"

Ik wil dat wanneer textbox A leeg is, in textbox B de integerwaarde 0 komt te staan (deze moet ik later optellen, voor hier niet relevant). Mijn huidige code is:

Private Sub txtA_TextChanged
Dim voet As Single = 3.281 'aantal voet per meter
Dim meter As Single = CSng(txtA.Text)

If (txtA.Text = "") Then
txtB.Clear()
txtB.Text = 0
Else : txtB.Text = (meter * voet)

End Sub

Het probleem zit hem hier:
In de if statement wil ik aangeven dat wanneer textveld A leeg is, geen berekening wordt uitgevoerd en tegelijk textbox B op integerwaarde 0 komt te staan.

Wie kan mij helpen?

MVG Sapato

[ Voor 8% gewijzigd door Verwijderd op 05-01-2006 15:03 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Je kan de berekening toch ook gewoon in de if zetten in plaats van in de definitie van je variabele?
edit:
Ik doel op deze regel:
Visual Basic .NET:
1
Dim meter As Single = CSng(txtA.Text)

Doe die toewijzing ook gewoon in de if.

[ Voor 40% gewijzigd door NMe op 05-01-2006 15:05 ]

'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.


Verwijderd

Topicstarter
Jawel, en dat lukt me ook wel. Maar dat was niet mijn vraag noch is dat het antwoord hehe.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Maar dat is wel een foutmelding die je eruit moet halen, lijkt me? :)

Verder kun je geen integerwaarde neerzetten in een tekstveld, althans niet in de talen die ik ken. Visual Basic ken ik niet echt, maar ik kan me voorstellen dat je "0" moet toekennen aan een tekstbox, en niet 0. :)

'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.


Verwijderd

Topicstarter
Van die quotes voor de nul was ik hier vergeten te posten, offcourse moet dat hehe.

Je tip heeft overigens wel gewerkt, thnx. Ik begrijp alleen waarom nog niet. Care to explain? :D

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ten eerste probeer je txtA.Text te converteren naar single wat dus mis gaat als er niks is ingevuld ( Overigens kan je beter gebruik maken van de Convert class dus Convert.ToSingle( string value ) ).

In c# doet dit denk wat je wilt
C#:
1
2
3
4
5
6
7
8
9
10
11
public void txtA_TextChanged(){
    if( txtA.Text.Equals( String.Empty ) ){
        txtB.Text = "0";
    }
    else{
        float voet = 3.281;
        //Let wel op dat dit dus mis kan gaan als iemand geen getal intypt
        float meter = Convert.ToSingle( txtA.Text );
        txtB.Text = (meter * voet).ToString();
    }
}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
Dus een textbox string mag wel altijd leeg zijn maar een single niet? Dan zou op het moment dat je de textbox converteert naar een single, je ook een single terug moeten kunnen vinden ergens?

[ Voor 47% gewijzigd door Verwijderd op 05-01-2006 15:36 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
een single is een value type. Een value type moet altijd een waarde hebben.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
Ok, d8 dat de textbox stadaard een single was, maar hij is dus gewoon leeg hehe, of zie ik dat verkeerd?

[ Voor 15% gewijzigd door Verwijderd op 05-01-2006 15:38 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Een TextBox bevat altijd een string. Deze staat in de Text property van de TextBox. Hier kan in princiepe alles ingevuld worden en ook als er niks ingevuld is dan bevat de Text property een string alleen dan een string met 0 characters ofwel String.Empty.

Een single is een Floating point getal. Als je de waarde die in je TextBox staat wilt gebruiken zul je dus eerst je string om moeten zetten naar een Single. Jij doet dat hier met CSng en dat kan idd wel maar dat is eigenlijk de oude manier uit VB6. In het .NET framework heb je hiervoor de Convert utility class. Deze kan je gebruiken om allerlei data types te converteren naar een ander data type.
Om een string te converteren naar een Single kan je gebruik maken van Convert.ToSingle( string value )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
Ik haalde het begrip single en string een paar keer door elkaar zag ik toen ik teruglas. Door jouw uitleg is dat een stuk helderder nu. Thnx a lot again!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

rwb schreef op donderdag 05 januari 2006 @ 15:36:
een single is een value type. Een value type moet altijd een waarde hebben.
Niet in .NET 2.0 hoor :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

Zolang jij niet expliciet aangeeft dat het een NullAble type is wel.

[ Voor 1% gewijzigd door pjvandesande op 05-01-2006 17:00 . Reden: expleciet bestaat niet ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

questa schreef op donderdag 05 januari 2006 @ 16:47:

Zolang jij niet expleciet aangeeft dat het een NullAble type is wel.
Ergo niet 'altijd'.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

Values types hebben initial value, voor een int is dit 0 en voor een DateTime is dat DateTime.Now. Maar ze hebben altijd een value naar mijn weten.

[ Voor 6% gewijzigd door pjvandesande op 05-01-2006 17:02 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Was idd een beetje kort door de bocht. Maar het gaat om het idee natuurlijk. Een Nullable type is trouwens voor zover ik weet gewoon een Generic Object waar je een Value-Type als Type aan meegeeft. In C# is dan nog wat extra syntax toegoegd om daarvan gebruik te maken.
Dus onderliggend moet een ValueType nog steeds altijd een value hebben.
(Heb nog niet echt met 2.0 gewerkt dus weet niet 100% hoe het zit)

even nagekeken en een Nullable type is gewoon van type Nullable en voor dat type is NULL ook gewoon een value. Dus m.i. moet een Value-type nog altijd een value hebben.

[ Voor 19% gewijzigd door Woy op 05-01-2006 17:07 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

rwb schreef op donderdag 05 januari 2006 @ 17:04:
[...]

Was idd een beetje kort door de bocht. Maar het gaat om het idee natuurlijk. Een Nullable type is trouwens voor zover ik weet gewoon een Generic Object waar je een Value-Type als Type aan meegeeft. In C# is dan nog wat extra syntax toegoegd om daarvan gebruik te maken.
Dus onderliggend moet een ValueType nog steeds altijd een value hebben.
(Heb nog niet echt met 2.0 gewerkt dus weet niet 100% hoe het zit)
Dat is helemaal juist. C# heeft nog wat syntax candy voor je, je hoeft alleen een ?<ValueType> te tikken. Maar het is niets meer dan een Generic Object met een IsNull flag de value type zelf heeft altijd een value ook bij een NullAble type.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
questa schreef op donderdag 05 januari 2006 @ 17:07:
[...]


Dat is helemaal juist. C# heeft nog wat syntax candy voor je, je hoeft alleen een ?<ValueType> te tikken. Maar het is niets meer dan een Generic Object met een IsNull flag de value type zelf heeft altijd een value ook bij een NullAble type.
Exact wat ik dacht ;)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • stean
  • Registratie: November 2000
  • Laatst online: 05-01 12:11
je kan isnull() of ="" of len(textA) gebruiken en dan pas de convert actie doen als deze allemaal false opleveren. dus eerst op inhoud checken en dan pas converten

  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11-2025
Try catch.. zet een 0 in textbox2 in de catch ?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Mephix schreef op maandag 09 januari 2006 @ 10:43:
Try catch.. zet een 0 in textbox2 in de catch ?
Gebruik dan liever de TryParse method
C#:
1
2
3
4
5
6
7
8
const float voet = 3.281;
float meter;
if( Single.TryParse( txtA.Text, meter ) ){
    txtB.Text = (voet * meter).ToString();
}
else{
    txtB.Text = "0";
}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1