Announcement

Collapse
No announcement yet.

Progressbar füllt sich nicht vollständig

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Progressbar füllt sich nicht vollständig

    Hallo,

    ich habe einen Timer dessen Status durch eine Progressbar angezeigt werden soll. Der Timer soll zB einen Countdown von 15 Sekunden haben und die Progressbar bei 0 Sekunden bei 100% sein. Leider klappt mein Ansatz nicht so richtig:

    [highlight=c#]
    private int sekunden = 15;

    private void button1_Click(object sender, EventArgs e)
    {
    ProgressBar progressBar1 = new ProgressBar();
    progressBar1.Maximum = sekunden;
    progressBar1.Minimum = 0;

    countdown_timer = new Timer();
    countdown_timer.Tick += new EventHandler(countdown_timer_Tick);
    countdown_timer.Interval = 1000; // 1 Sekunde
    countdown_timer.Start();
    }

    private void countdown_timer_Tick(object sender, EventArgs e)
    {
    if (sekunden > 0)
    {
    sekunden -= 1;
    label1.Text = sekunden.ToString();
    progressBar1.Value++;
    }

    if (sekunden == 0)
    {
    countdown_timer.Stop();
    }
    }
    [/highlight]

    Die Progressbar füllt sich nicht zu 100% bis der Timer abläuft.

    Hat jemand einen Tipp für mich?

  • #2
    if (sekunden > 0)
    {
    sekunden -= 1;
    label1.Text = sekunden.ToString();
    progressBar1.Value++;
    }

    else{
    progressBar1.Value++;
    countdown_timer.Stop();
    }

    Sind die Sekunden durch -1 =0 wird das nächste if ausgeführt. Es dürfte ein tick fehlen
    Christian

    Comment


    • #3
      Funktioniert leider auch nicht:

      https://ibb.co/HYhrJ3x

      Comment


      • #4
        Dann debugge das durch und setze
        if (sekunden > 0)
        einen Breakpoint und schaue wie oft du da vorbeikommst
        Christian

        Comment


        • #5
          Okay, hab ich gemacht. Das Label nimmt die Werte des Timers wie zu erwarten korrekt an, nur in der Progressbar stimmt was nicht. Diese Werte sind pro Sekunde drinnen:

          14 = {Value = 0 Min = 0 Max = 100}

          13 = {Value = 1 Min = 0 Max = 100}

          12 = {Value = 2 Min = 0 Max = 100}

          11 = {Value = 3 Min = 0 Max = 100}

          10 = {Value = 4 Min = 0 Max = 100}

          ...

          0 = {Value = 16 Min = 0 Max = 100}

          Wieso steht da was in Minuten drinnen?

          Comment


          • #6
            Min=Minimum
            Max=Maximun
            Das wird wohl das Problem bestehen, dass die Progressbar nicht neu gezeichnet wird. In Java würde ich sagen, nimm einen Swingworker. Da ich keinen C# habe, kann ich nichts weiter dazu sagen
            Christian

            Comment


            • #7
              Ich vermute mal das die ProgressBar die tatsächlich auf der Form angezeigt wird hat einfach einen anderen Maximum Wert.

              Du erzeugst in deinem button1_Click Handler eine neue ProgressBar und schraubst da an Minimum/Maximum. Die hat nix mit der ProgressBar zu tun die auf der Form liegt auch wenn du der lokalen Variablen in der Methode den gleichen Namen gegeben hast. Wirf einfach mal die erste Zeile in dem Event weg und schau was passiert.

              Comment


              • #8
                Jetzt klappt alles. Danke für die Hilfe. Ich füge den Code hier nochmal ein, falls ihn noch jemand braucht:

                Code:
                        private int sekunden = 15;
                
                        private void button1_Click(object sender, EventArgs e)
                        {
                            progressBar1.Maximum = sekunden;
                            progressBar1.Minimum = 0;
                
                            countdown_timer = new Timer();
                            countdown_timer.Tick += new EventHandler(countdown_timer_Tick);
                            countdown_timer.Interval = 1000; // 1 Sekunde
                            countdown_timer.Start();
                        }
                
                        private void countdown_timer_Tick(object sender, EventArgs e)
                        {
                            if (sekunden > 0)
                            {
                                sekunden -= 1;
                                label1.Text = sekunden.ToString();
                                progressBar1.Value++;
                            }
                
                
                            else
                            {
                                countdown_timer.Stop();
                            }
                        }

                Comment

                Working...
                X