Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB.NET]Textbox heeft 2 waardes

Pagina: 1
Acties:

  • Jogai
  • Registratie: Juni 2004
  • Laatst online: 28-11 11:55
Ik heb problemen met een waarde in mijn textbox. Als ik ga debuggen zie ik dat de waarde veranderd waar dat niet zou moeten. Tussen regel 1 en 2 gaat hij nergens anders naar toe en als de debugger in regel 2 zit heeft regel 1 nog steeds dezelfde waarde.

Visual Basic .NET:
1
2
3
If Me.txtboxCubage.Text <> "" AndAlso Me.txtDuration.Text <> "" Then
Me.txtboxTotalCubage.Text = String.Format("{0:C}", Convert.ToDouble(Me.txtboxCubage.Text.Replace("€ ", "")) * Convert.ToDouble(Me.txtDuration.Text))
End If

Bij de controle of de box niet leeg is lijkt de goede waarde erin te staan:
Afbeeldingslocatie: http://jogai.nl/images/zoom/images/capture_08022007_174152.jpg
Maar bij de berekening zet hij er ineens iets anders in, terwijl die regel erboven nog steeds het juiste bedrag bevat.
Afbeeldingslocatie: http://jogai.nl/images/zoom/images/capture_08022007_174240.jpg

De enige keer dat die waarde nog voor komt is in BaseFormLibrary.designer.vb:
(Vanalles tussenuit geknipt voor de leesbaarheid)
Visual Basic .NET:
1
2
3
4
Partial Class BaseFormLibrary
    Inherits System.Windows.Forms.Form
        Private Sub InitializeComponent()
            Me.Text = "ODFJELL - ABC"

Klik hier om op linkedIn lid te worden van de Freelance Tweakers groep.


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Jogai schreef op donderdag 02 augustus 2007 @ 17:56:
De enige keer dat die waarde nog voor komt is in BaseFormLibrary.designer.vb:
(Vanalles tussenuit geknipt voor de leesbaarheid)
Visual Basic .NET:
1
2
3
4
Partial Class BaseFormLibrary
    Inherits System.Windows.Forms.Form
        Private Sub InitializeComponent()
            Me.Text = "ODFJELL - ABC"
Was het je al opgevallen dat je de tekst ODFJELL - ABC niet toekent aan een textbox, maar aan het form zelf (je verandert dus de titel van het form)?

In het 1e screenshot evalueer je de hele expressie "Me.txtboxCubage.Text" (en zie je in de debugger dus de waarde terug die je zou verwachten), echter, in het 2e screenshot evalueer je alleen de expressie "Text" (te zien aan de geselecteerde tekst).
De debugger denkt daarom dat het hier om de Text property van je form gaat in plaats van de Text property van je textbox, en daarom zie je de 'verkeerde' waarde - de titel van je form.

Selecteer op de 2e regel maar eens de volledige expressie "Me.txtboxCubage.Text", en evalueer die met de debugger. Je zult zien dat je nu wel de waarde terugkrijgt die je zou verwachten.

  • Jogai
  • Registratie: Juni 2004
  • Laatst online: 28-11 11:55
Ok, dat is duidelijk. Bedankt.
Het resultaat van de berekening werdt ook niet goed weergegeven, maar dat kwam omdat het nog een keer overscreven werdt.
Toch weer wat van debuggen etc. geleerd. :)

Klik hier om op linkedIn lid te worden van de Freelance Tweakers groep.


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Jogai schreef op donderdag 02 augustus 2007 @ 20:15:
Ok, dat is duidelijk. Bedankt.
Het resultaat van de berekening werdt ook niet goed weergegeven, maar dat kwam omdat het nog een keer overscreven werdt.
Toch weer wat van debuggen etc. geleerd. :)
Happy to help ;)

Het is misschien een kwestie van smaak, en iedereen heeft hier waarschijnlijk zijn eigen opvattingen over, maar toch even het volgende: Het is geen schande om een statement op te breken in meerdere regels. Sterker nog: het maakt de code vaak een stuk leesbaarder en is daarnaast makkelijker te debuggen.

Vergelijk het volgende:
C#:
1
2
if (txtboxCubage.Text != "" && txtDuration.Text != "")
   txtboxTotalCubage.Text = String.Format("{0:C}", Convert.ToDouble(txtboxCubage.Text.Replace("€ ", "")) * Convert.ToDouble(Me.txtDuration.Text));
en
C#:
1
2
3
4
5
6
if (txtboxCubage.Text != "" && txtDuration.Text != "")
{
   double cubage = Convert.ToDouble(txtboxCubage.Text.Replace("€ ", ""));
   double duration = Convert.ToDouble(txtDuration.Text);
   txtboxTotalCubage.Text = String.Format("{0:C}",  cubage * duration);
}

Voordeel hiervan is dat je statements minder complex zijn, en daarnaast ook dat als je een Exception om je oren krijgt met een bepaald regelnummer, dat je specifieker weet wat er nu precies mis ging: het parsen van de cubage, het parsen van de duration of het setten van de "total cubage" text.

Maar goed, nogmaals: dit is misschien een kwestie van smaak, dus zie maar of je hier wat mee doet. :)

  • Jogai
  • Registratie: Juni 2004
  • Laatst online: 28-11 11:55
Bedankt voor de tip. Dat hebben we ook gedaan om er daarna achter te komen dat hij later nog overschreven werd.
Nu is het nog een bugfix project, maar als ik zelf een project start zal ik je tip zeker meenemen. Nogmaals Bedankt.

Klik hier om op linkedIn lid te worden van de Freelance Tweakers groep.