lørdag, januar 23, 2021

C# kode problem

Daily Rush Debat Programmering C# kode problem

  • Forfatter
    Emne
  • #0

    VFF1983
    Bruger
    442 indlæg
    Offline

    Hej DR

    Jeg har lidt problemer med noget C# kode, som egentlig burde være simpelt. Har selvfølgelig Googlet det, men det har ikke givet resultat endnu.

    Det drejer sig om et lille stykke kode der kan tælle ned fra et tal man selv indtaster i en textbox og som derefter skriver en besked/gør noget.

    Problemet:

    1. Tæller fint ned og viser tallet blive talt ned, men når man trykker “Nulstil” og starter en ny nedtælling, vil den tælle -2 hvert sekund i stedet for -1. Hvis du nulstiller endnu en gang, er det -3 osv.

    Jeg synes jeg har tjekket alt igennem. Hvad kan være galt?

    2. Et anden ting som driller lidt, er at jeg gerne vil sikre mig der kun kan indtastes et positivt heltal i textboxen, men dette er indtil videre ikke lykkedes.

    Jeg har lagt al koden ud i et txt fil og linket til den:

    https://www.dropbox.com/s/9k2xsi1wim8a73e/kode.txt

    Hvis nogen kan komme med et løsningsforslag eller en ide, er jeg meget taknemmelig

    Mvh.
    Thomas

    Mine sider:

    thomasrasmussen.dk
    Netradio.nu
    KalenderNet.dk

Viser 10 kommentarer - 1 til 10 (af 10 i alt)
  • Forfatter
    Kommentarer
  • #1

    MAV
    Bruger
    1.309 indlæg
    Offline

    Et hurtigt gæt, uden at have kigget grundigt på koden. Tilføjer du ikke en eventhandler til timeren hver gang du trykker start? Umiddelbart fjerner du den ikke når du trykker stop. Så hver gang du starter den vil timeren vel kalde UpdateLabel, det antal gange du har tilføjet en eventhandler?

    Enjoy the journey

    #2

    DThought
    Bruger
    123 indlæg
    Offline

    Du skriver at fejlen opstår når du trykker på nulstil, men efter hvad jeg kan se, så gør din nulstil ikke så meget andet end at stoppe og disable din timer.

    Sker “fejlen” når du trykker “Start” igen eller?

    #3

    VFF1983
    Bruger
    442 indlæg
    Offline

    Problem 1 løst!

    #1 Tror du havde fat i noget af det rigtige, for jeg prøvede lige at oprette en instans af Dispatchertimer inde i metoden i stedet for i toppen, og så hørte problemet op. Synes ellers lige jeg havde forsøgt alt.

    #2 Jo den nulstiller egentlig bare alt, men det hjalp at oprette timeren inde i metoden. Den har åbenbart kørt 2 på samme tid førhen, og derfor talt dobbelt, vil jeg tro. Men ja, fejlen skete først da jeg trykkede start igen.

    Mine sider:

    thomasrasmussen.dk
    Netradio.nu
    KalenderNet.dk

    #4

    Belwas
    Bruger
    450 indlæg
    Offline

    #1 har ret. Tilføj din eventhandler i constructoren i stedet.

    #5

    MAV
    Bruger
    1.309 indlæg
    Offline

    #3 Vil tro du også bare kan flytte ” timer.Tick += new EventHandler(UpdateLabel);” op i constructoren, så den kun bliver tilføjet 1 gang, uden det ville skabe problemer.

    EDIT: For langsom.

    Mht. problem 2. Kan du ikke bruge KeyPress event fra tekstboksen til at validere input? (Det hjælper selvfølgelig kun på input fra tastatur og ikke fx copy-pasta)

    Enjoy the journey

    #6

    VFF1983
    Bruger
    442 indlæg
    Offline

    #5 Det KeyPress event du nævner var også hvad jeg stødte på da jeg søgte på nettet, men har aldrig brugt det før, så fik det ikke til at virke.

    Skal der tilføjes et bibliotek i toppen (using System.???) før det kan bruges?

    Mine sider:

    thomasrasmussen.dk
    Netradio.nu
    KalenderNet.dk

    #7

    MAV
    Bruger
    1.309 indlæg
    Offline

    #6 Hmm. Har aldrig selv arbejdet med WPF, men det ser ud til det ikke er så nemt at arbejde med KeyPress events i WPF.

    Et alternativ kunne være TextChanged. Således at du tjekker om teksten i tekstboksen indeholder andet end tal (deriblandt -) hver gang teksten ændres.

    Der burde ikke skulle tilføjes nogle namespaces i toppen.

    Enjoy the journey

    #8

    VFF1983
    Bruger
    442 indlæg
    Offline

    #7 Ok, det vil jeg lige prøve at kigge på, det er ikke noget jeg har forsøgt mig med før. Tak for hjælpen.

    Og tak til alle for deres input og forsøg på at hjælpe mig

    Mine sider:

    thomasrasmussen.dk
    Netradio.nu
    KalenderNet.dk

    #9

    OneEighty
    Bruger
    163 indlæg
    Offline

    private void HandleKeyDown(object sender, KeyEventArgs e)
    {
    if (e.Key < Key.D0 || e.Key > Key.D9)
    {
    e.Handled = true;
    }
    }

    Og dernæste følgende på din textbox i XAML

    Nu burde du kun kunne indtaste integer værdier.

    #10

    VFF1983
    Bruger
    442 indlæg
    Offline

    #9
    Tak, det vil jeg lige forsøge mig med senere, ser meget overskueligt ud.

    Mine sider:

    thomasrasmussen.dk
    Netradio.nu
    KalenderNet.dk

Viser 10 kommentarer - 1 til 10 (af 10 i alt)
  • Du skal være logget ind for at kommentere på dette indlæg.