Ga naar inhoud

MrCash

Lid
  • Items

    41
  • Registratiedatum

  • Laatst bezocht

Berichten die geplaatst zijn door MrCash

  1. Ik heb nog 1 vraagje. Ik zou graag mijn komma getallen op 2 decimalen willen afronden wan ik heb bijv: 2903,118 dan moet dus,12 worden. Weet iemand de oplossing? alvast bedankt!!!

    Hey Ricardog. Eerst en vooral sorry dat ik niet meer heb gereageerd, maar ik zit tot over mijn oren in het werk.

    Dit is heel eenvoudig op te lossen: nu wijs je gewoon de double waarde toe aan de Text-property van je label, wat een impliciete conversie naar string triggert. Wanneer je expliciet converteert heb je meer opties.

    Als x je double is en lbl je label, dan doe je dit:

    lbl.Text = x.ToString("F2")

    Wil je de double-waarde zelf afronden, dan kan je de functie Math.Round() gebruiken.

  2. Wel, een probleem dat ik opmerk is dat je programma niet afsluit als het laatste form gesloten is. Dat komt omdat je overal Form.Hide() gebruikt. De forms worden zo onzichtbaar gemaakt, maar blijven wel geladen in het geheugen. Maar op 't eerste zicht moet er wel wat code veranderd worden om tot een goed sluitend programma te komen. Ik ga eens kijken hoe dat het makkelijkste kan zonder al te veel te moeten veranderen.

    En dan iets dat het programma niet sneller of trager zal maken. Ieder heeft zijn eigen programmeerstijl, da's OK. Maar probeer je code netjes en overzichtelijk te houden. Als ik je code lees en écht wil begrijpen wat er berekend wordt moet ik nu een lijstje maken op papier met label1 is dit en label2 is dat, ... Geef al je besturingselementen logische namen, da's voor jou ook handiger als je later iets wil veranderen.

    Tenslotte is het altijd handiger als je letterlijke waarden zoveel mogelijk buiten je code laat. Zet de prijzen en BTW-tarief bijvoorbeeld in een settings-file. Zo hoef je niet te hercompileren als er iets verandert, maar nog veel belangrijker: blijven die zaken gecentraliseerd. Stel dat je op 5 verschillende formulieren een bepaalde prijs gebruikt, en stel dat die morgen verandert. Als je per ongeluk één vermelding van die prijs in de broncode vergeet te wijzigen kan dat onaangename gevolgen hebben. Staat die in een settings-file, of in de registry of in een variabele, die overal in het programma gebruikt wordt, hoef je dat maar één keer te veranderen.

    En natuurlijk is een 'perfect' (bestaat niet) objectgeorienteerd programma netter, maar daar steek je heel wat meer tijd en lijnen code in. En voor een kleine app als deze is dat eigenlijk overbodig vind ik.

    Ik ga nog eens kijken naar het afsluitprobleem.

    EDIT: Ik zie niet direct een manier om het afsluitprobleem op een "mooie" manier op te lossen zonder de hele code om te gooien. Dus een lapmiddeltje: Het eenvoudigste is om op elk formulier een eventhandler te maken voor de FormClosing event en daar Application.Exit() aan te roepen:

    [size=2][/size][size=2][color=#0000ff][size=2][color=#0000ff]Private[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size][/color][/size][size=2] Totaal_prijs_FormClosed([/size][size=2][color=#0000ff][size=2][color=#0000ff]ByVal[/color][/size][/color][/size][size=2] sender [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]Object[/color][/size][/color][/size][size=2], [/size][size=2][color=#0000ff][size=2][color=#0000ff]ByVal[/color][/size][/color][/size][size=2] e [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] System.Windows.Forms.FormClosedEventArgs) [/size][size=2][color=#0000ff][size=2][color=#0000ff]Handles[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]Me[/color][/size][/color][/size][size=2].FormClosed
    Application.Exit()
    [/size][size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub
    [/color][/size][/color][/size]

  3. Geen probleem hoor. Ik werk meestal in c# en vb is nogal lang geleden...

    Wat betreft je tweede vraag, je hebt 2 opties:

    Ofwel doe je, zoals je zegt textbox.Text = textbox.Text.Replace(","c, "."c), da's het simpelste

    Ofwel maak je een eventhandler voor de KeyPress event van de textbox, waarin je op zoek gaat naar de komma en die direct vervangt door een punt. Dan krijg je zoiets:

    [size=2][color=#0000ff][size=2][color=#0000ff]Private [/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size][/color][/size][size=2] TextBox1_KeyPress([/size][size=2][color=#0000ff][size=2][color=#0000ff]ByVal[/color][/size][/color][/size][size=2] sender [/size][size=2][color=#0000ff][size=2][color=#0000ff]As [/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Object[/color][/size][/color][/size][size=2], [/size][size=2][color=#0000ff][size=2][color=#0000ff]ByVal[/color][/size][/color][/size][size=2] e [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] System.Windows.Forms.KeyPressEventArgs) [/size][size=2][color=#0000ff][size=2][color=#0000ff]Handles[/color][/size][/color][/size][size=2] TextBox1.KeyPress[/size]
    [size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size][/color][/size][size=2] e.KeyChar = [/size][size=2][color=#a31515][size=2][color=#a31515]","c [/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size][/color][/size][size=2] e.KeyChar = [/size][size=2][color=#a31515][size=2][color=#a31515]"."c[/color][/size]
    [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]If [/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Not[/color][/size][/color][/size][size=2] ([/size][size=2][color=#0000ff][size=2][color=#0000ff]Char[/color][/size][/color][/size][size=2].IsNumber(e.KeyChar) [/size][size=2][color=#0000ff][size=2][color=#0000ff]Or [/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Char[/color][/size][/color][/size][size=2].IsControl(e.KeyChar) [/size][size=2][color=#0000ff][size=2][color=#0000ff]Or[/color][/size][/color][/size][size=2] e.KeyChar = [/size][size=2][color=#a31515][size=2][color=#a31515]"."c[/color][/size][/color][/size][size=2]) [/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size][/color][/size][size=2] e.Handled = [/size][size=2][color=#0000ff][size=2][color=#0000ff]True[/color][/size]
    [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]End [/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size]
    [/color][/size]

    De eerste regel vervangt de komma door een punt, onmiddelijk als ze wordt ingetikt en nog voor ze in de textbox komt.

    De tweede regel houdt alle toetsaanslagen tegen dat niet voldoet aan één van de volgende voorwaarden: a/ een cijfer; b/ een controlchar (zoals backspace) of c/ die decimale punt.

    Dit kan je dan naar wens verder uitbreiden en bijvoorbeeld bij de punt gaan controleren of er al één in de textbox staat en dan selectief tegenhouden, etc...

    PS Je mag hieronder op Markeer als opgelost klikken

  4. Hey, ik veronderstel dat in je configuratiescherm>landinstellingen het decimaalteken staat ingesteld op komma.

    Ik heb je procedure licht aangepast, probeer het volgende eens:

     
    Private Sub Totaal_prijs_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Label5.Text = groep1.Label1.Text.Replace(","c, "."c)
    Label6.Text = groep2.Label1.Text.Replace(","c, "."c)
    Label7.Text = groep3.Label1.Text.Replace(","c, "."c)
    Label8.Text = groep4.Label1.Text.Replace(","c, "."c)
    Label17.Text = groep1.Label9.Text.Replace(","c, "."c)
    Label18.Text = groep1.Label11.Text.Replace(","c, "."c)
    Label19.Text = groep2.Label11.Text.Replace(","c, "."c)
    Label20.Text = groep2.Label9.Text.Replace(","c, "."c)
    Label22.Text = groep3.Label9.Text.Replace(","c, "."c)
    Label21.Text = groep3.Label11.Text.Replace(","c, "."c)
    Label24.Text = groep4.Label9.Text.Replace(","c, "."c)
    Label23.Text = groep4.Label11.Text.Replace(","c, "."c)
    Label26.Text = bewerkingen.Label8.Text.Replace(","c, "."c)
    Label28.Text = uitsparingen.Label8.Text.Replace(","c, "."c)
    Label30.Text = Achterwanden_per_m2.Label9.Text.Replace(","c, "."c)
    Label32.Text = Extra_bewerkingen_achterwanden.Label3.Text.Replace(","c, "."c)
    Label34.Text = Spoelbakken.Label3.Text.Replace(","c, "."c)
    Label36.Text = Smetlijsten_tot_8_cm.Label7.Text.Replace(","c, "."c)
    Label73.Text = CStr(Conversion.Val(Label5.Text) + Conversion.Val(Label6.Text) + Conversion.Val(Label7.Text) + Conversion.Val(Label8.Text) + Conversion.Val(Label17.Text) + Conversion.Val(Label18.Text) + Conversion.Val(Label19.Text) + Conversion.Val(Label20.Text) + Conversion.Val(Label21.Text) + Conversion.Val(Label22.Text) + Conversion.Val(Label23.Text) + Conversion.Val(Label24.Text) + Conversion.Val(Label26.Text) + Conversion.Val(Label28.Text) + Conversion.Val(Label30.Text) + Conversion.Val(Label32.Text) + Conversion.Val(Label34.Text) + Conversion.Val(Label36.Text)).Replace(","c, "."c)
    End Sub
    

    PS Doe voor de zekerheid je oude procedure nog niet weg, maar comment ze out.

  5. Ricardog,

    Ik snap echt niet wat er bij jou foutloopt met de Val() functie. Ik heb het hier zelf ook geprobeerd en het werkt perfect.

    Ik heb gewoon een Form met 5 labels gemaakt en de volgende code in de Form.Load eventhandler:

     
    Label1.Text = "123.45"
    Label2.Text = "678.90"
    Label3.Text = "987.66"
    Label4.Text = ""
    Label5.Text = Conversion.Val(Label1.Text) + Conversion.Val(Label2.Text) + Conversion.Val(Label3.Text) + Conversion.Val(Label4.Text)
    

    Het resultaat in Label5 is dan 1790.01, wat volgens mijn rekenmachien moet kloppen... Ik heb ook wat gespeeld met de waarden van de labels en het blijft goed gaan... Misschien kan je aan de hand hiervan vergelijken wat er anders is in jouw programma, en waar de fout zit?

    Als je dat graag hebt maak ik ook nog wel een voorbeeldje met CDbl() ofzo, maar dat zal dan iets voor volgende week zijn denk ik, want heb nog massa's werk (ben al sinds vanmorgen 7u30 bezig en 't is weeral 1u30...)

    Laat iets weten of 't lukt en of ik nog een ander voorbeeldje moet maken...

    EDIT: Als je de oplossing niet vindt mag je me altijd je project doorsturen, dan zoek ik mee als ik tijd heb.

    WindowsApplication1.zip

  6. Persoonlijk zou ik niet riskeren om de schijf terug te formatteren en er opnieuw (belangrijke?) bestanden op te zetten als dat zou lukken.

    Het kan zijn dat ze nog jaren meegaat op die manier, maar ik zou het risico niet nemen.

    Misschien kan iemand anders je meer advies geven over het recoveren van bestanden, want da's niet mijn specialiteit... Eventueel ook over een grondige oppervlaktetest van de schijf, zodat je hem misschien toch nog kan gebruiken...

  7. Yep, ik zie waar het probleem zit.

    CDbl() herkent een lege string niet als een getal, terwijl Val() altijd gewoon 0 geeft als hij geen getal vindt...

    De meest voor de hand liggende optie is om elke keer te gaan testen (bijvoorbeeld met

    Iif(LabelX.Text="",0R, CDbl(LabelX.Text))

    ), maar dan wordt je code wel heel ingewikkeld natuurlijk. Als er dan nog eens de mogelijkheid bestaat dat er ergens een andere, niet-numerieke waarde staat wordt het helemaal ingewikkeld.

    'k Ben er wel nog niet achter waarom Val() niet werkt als je een punt als scheidingsteken gebruikt...

    Je kan eventueel proberen om Val() te nesten in CDbl(), en dan krijg je

    CDbl(Val(LabelX.Text)) + ......

    Ik denk ni dat 't zou werken, maar is in elk geval overzichtelijker dan de Iif...

    PS, in het eerste codefragment staat nulR, dus niet OR...

  8. Aan de IP instellingen van je computer hoef je niets te veranderen. Die staan waarschijnlijk op "automatisch toewijzen" en mogen zo blijven staan. Het is je router die ze toewijst via DHCP.

    Het adres van je router is een IP-adres. Daarvoor is dus geen DNS-omzetting nodig. Een DNS-server heb je enkel nodig voor de omzetting van een URL. Je computer stuurt dan naar de dns-server dat adres (bijvoorbeeld www.vtm.be) en de dns server doet niets meer dan je computer een antwoord sturen met het bijhorende ip-adres (in dit voorbeeld 194.0.175.5). Maar stel je voor dat je van alle websites het IP-adres zou moeten onthouden, daarvoor is dns uitgevonden.

    Als je dus al een IP-adres hebt, zoals hier bij je router, hoeft je computer geen dns-server meer te consulteren.

×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.