Autor Beitrag
creative100
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 31.01.16 20:02 
hallo ihr lieben,

Anfänger braucht Hilfe zu einer Progressbar. Habe einen kleinen Timer gebastelt der meinen Rechner automatisch herunter fährt. Eine Progressbar in der Status_Leiste soll mir nun noch die verbleibende Zeit Anzeigen. Leider Habe ich keine Ahnung wie ich das machen soll. Gibt es jemand der mir hierzu helfen kann? Das Projekt habe ich als Anhang beigelegt.
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 31.01.16 20:41 
Falls du bisher beim ausprobieren Probleme hattest, der Tick Event des Timers ist bei dir mit Form_Load verknüpft nicht mit der tmrUhr_Tick.

Ansonsten könnte man tmrUhr_Tick so implementieren

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
private const int maxSteps = 100;
private int steps;
private void tmrUhr_Tick(object sender, EventArgs e)
{
    if (steps == 0)
    {
        MessageBox.Show("Bäm");  //eigentlich Process.Start("ShutDown", "/a");
        tmrUhr.Enabled = false;
        Close(); // wird ja heruntergefahren also selbst beenden
    }

    pbRemaining.Value = (pbRemaining.Width / maxSteps) * steps;
    steps--;
}


in btnStart_Click den Call zu Process.Start entfernen, das mache ich lieber nach Ablauf aus dem Timer, und durch starten des Timers ersetzen z.B.
ausblenden C#-Quelltext
1:
2:
3:
4:
steps = maxSteps;
pbRemaining.Value = 0;
tmrUhr.Interval = (ende * 1000) / maxSteps;
tmrUhr.Enabled = true;
creative100 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 31.01.16 22:16 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Falls du bisher beim ausprobieren Probleme hattest, der Tick Event des Timers ist bei dir mit Form_Load verknüpft nicht mit der tmrUhr_Tick.


Vielen dank für deine Anregungen!! Ich habe beim Test bisher keine Probleme mit dem Tick Event des Timers, da es gewollt ist, dass der Timer beim laden des Formulares eine normale Uhrzeit anzeigen soll. Der Shut Down Timer funktioniert ja auch, aber er ist halt nicht vollständig wegen der Progress Bar. Ich überlege nun, wie kann ich nach dem Ivent btnStart_Click (also den eigentlichen beginn des Timers Shut Down) die bestehende Progress Bar aktivieren kann. Ich bin halt nur eine Anfänger und hänge hier. Also wenn ich 10 Minuten eingebe, sollte nun ein Grüner Balken in der Progress Bar zu sehen sein. Sekunde für Sekunde sollte der Balken der Progress Bar nun verschwinden. Umgekehrt währe ich auch schon zu frieden, also der Balken kann auch wachsen.
creative100 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 01.02.16 12:00 
Habe das jetztzt mal so gemacht wie du vorgeschlagen hast.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
private const int maxSteps = 100;
private int steps;
private void tmrUhr_Tick(object sender, EventArgs e)
{
    if (steps == 0)
    {
        MessageBox.Show("Bäm");  //eigentlich 
        Process.Start("ShutDown""/a");
        tmrUhr.Enabled = false;
        Close(); // wird ja heruntergefahren also selbst beenden
    }

    pbRemaining.Value = (pbRemaining.Width / maxSteps) * steps;
    steps--;
}


in btnStart_Click den Call zu Process.Start entfernen, das mache ich lieber nach Ablauf aus dem Timer, und durch starten des Timers ersetzen z.B.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
        private void btnStart_Click(object sender, EventArgs e)
        {
            int stunde = int.Parse(txtStunde.Text) * 3600;
            int minute = int.Parse(txtMinute.Text) * 60;
            int sekunde = int.Parse(txtSekunde.Text);

            int ende = stunde + minute + sekunde;
            var result = DateTime.Now.AddSeconds(+ende);
            var sek = ende.ToString();

            lblDown.Text = "um: " + result.ToString("HH:mm:ss");

            int minuten = ende / 60;

            sslRemaining.Text = "min: " + minuten.ToString();
            //Process.Start("Shutdown", "/s /t" + ende.ToString());


            steps = maxSteps;
            pbRemaining.Value = 0;
            tmrUhr.Interval = (ende * 1000) / maxSteps;
            tmrUhr.Enabled = true;


        }



Die Progressbar macht keine Reaktion, aber jede Sekunde bekomme ich die MessageBox.Show("Bäm") ausgegeben. Wenn der Grüne Balken in der Progressbar jede Sekunde wachsen würde oder eben kleiner würde wäre das Problem schon gelöst. Irgend etwas willst du mir sagen ich komme jedoch nicht darauf.???

Weiterhin erhalte ich eine NullReferenceException für die Zeile pbRemaining.Value = (pbRemaining.Width / maxSteps) * steps;
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 01.02.16 12:13 
Der Timer sollte nicht schon im Designer auf Enabled stehen. Der sollte erst loslaufen wenn er auch benötigt wird.