tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
16
ZUGRIFFE
2355
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    spamferkel Tutorials.de Gastzugang
    Hallo,
    ich bin in VB ein Newbie und habe folgenes Problem mit Visual Basic 2008:
    Ich möchte ein Programm schreiben, welches eine Art Timer ist. Es soll in Stunden, Minuten und Sekunden runterzählen. Außerdem soll nebenbei auch noch eine ProgressBar laufen, welche den aktuellen Status anzeigt.
    Kleine Teil davon habe ich schon, aber zusammen funktioniert es nicht und ich bekomme es auch nicht hin, dass die Zeit in Minuten und Stunden aufgeteilt wird: Also, dass wenn ich 0 Sekunden habe das Sekundenfeld auf 59 gesetzt wird und das im Minutenfeld auch eins abgezogen wird. usw!

    Wäre echt nett wenn mir da jemand was erklären könnte oder einen Link zu einem guten Tutorial schicken könnte!

    mfg.
    spamferkel

    P.S.:Bei google habe ich nichts gefunden!
     

  2. #2
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Zeig doch mal bissel Code.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  3. #3
    domipoppe domipoppe ist offline Mitglied
    Registriert seit
    May 2010
    Beiträge
    14
    jo, bisschen code, immer mal zeigen!
     

  4. #4
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Bitte auch mal auf das Erstellungsdatum achten. Der Threadstarter hat sich 1,5 Jahre nicht gerührt!
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  5. #5
    tsohGehT Tutorials.de Gastzugang
    Hallo allerseits,

    zwar ist dieser Thread schon "eine Zeit lang" ohne Aktivität, wollte aber kein Neuen erstellen, da sich meine Frage (und meine Erfahrung[Newbie]) mit der von spamferkel ähnelt.
    In VBTuturials auf youtube und in verschiedenen Foren bin ich zwar fündig geworden, jedoch sind die angewandten Methoden so unterschiedlich, dass es mir schwer fällt, einzelne Objekte zu verknüpfen.
    Bisher habe ich zwei Möglichkeiten gefunden:


    Wünschenswertes Resultat:
    -Ein Countdown, der eine manuell eingegebene Zeit (HH:MM) herunterzählt (Ausgabe in einem Label[HH:MM:SS] sowie einer ProgressBar)

    1.Ausgangssituation:
    - 2 NumericUpDown, 3 Label, 2 Button, 1 ProgressBar, 1 Timer
    Probleme:
    - Zeitausgabe läuft nicht korrekt (Eingabe: 1h 0min - Ausgabe: -1:59:59 // Eingabe: 0h 1min - Ausgabe: -1:59:59)
    - Programmierung der ProgressBar
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Public Class Form1

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If LabelSekunden.Text = 0 Then
    LabelSekunden.Text = 59
    LabelMinuten.Text -= 1
    End If
    If LabelMinuten.Text = 0 Then
    LabelMinuten.Text = 59
    LabelStunden.Text -= 1
    End If
    LabelSekunden.Text -= 1
    If LabelSekunden.Text = "0" And LabelMinuten.Text = "0" And LabelStunden.Text = "0" Then
    Timer1.Stop()
    LabelSekunden.Text = "00"
    LabelMinuten.Text = "00"
    LabelStunden.Text = "00"
    End If
    If LabelSekunden.Text = 0 Then
    MsgBox("...")
    My.Computer.Audio.Play("C:\WINDOWS\Media\tada.wav")
    End If
    End Sub

    Private Sub ButtonStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStart.Click
    Timer1.Interval = 1000
    LabelMinuten.Text = NumericUpDownMinuten.Value
    LabelStunden.Text = NumericUpDownStunden.Value
    Timer1.Enabled = True
    Timer1.Start()
    End Sub

    Private Sub ButtonStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStop.Click
    Timer1.Stop()
    End Sub

    End Class
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------


    2. Ausgangssituation(Quelle: http://www.tutorials.de/forum/net-ca...countdown.html )
    - 1 Textbox, 1 Label, 2 Button, 1 ProgressBar, 1 Timer
    Probleme:
    - Auslesen der Stunden bzw Minuten (bei einer Eingabe von "HHMM" etc. - es wäre umständlich in Sekunden
    umzurechnen) und die entsprechende Programmierung des Timers/ der ProgressBar
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Public Class Form1

    Private Sub ButtonStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStart.Click
    LabelSekunden.Text = TextBox1.Text
    ProgressBar1.Value = 0
    ProgressBar1.Maximum = CType(TextBox1.Text, Integer)
    Timer1.Start()
    End Sub

    Private Sub ButtonStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStop.Click
    Timer1.Stop()
    End Sub

    Private Sub Form1_Load(ByRef sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Timer1.Interval = 1000
    End Sub

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim N As Integer = CType(LabelSekunden.Text, Integer)
    LabelSekunden.Text = CType(N - 1, String)
    ProgressBar1.Value = ProgressBar1.Value + 1
    If N = 1 Then
    Timer1.Stop()
    My.Computer.Audio.Play("C:\WINDOWS\Media\tada.wav")
    End If
    End Sub

    End Class
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    MfG
    Michael

    PS: Bin für jede Lösung oder jeden Verbesserungsvorschlag dankbar.
     

  6. #6
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Eine auf die Schnelle auf die Beine gestellte Möglichkeit wäre zum Beispiel folgendermassen (mit einer progressbar, die als Maximum 500 und als Minimum 0 hat.
    Code csharp:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private TimeSpan CurrentTimeLeft;
            private DateTime LastUpdate;
            private double TotalMilliseconds;
     
            private void button1_Click(object sender, EventArgs e)
            {
                numericUpDown1.Enabled = false;
                numericUpDown2.Enabled = false;
                button1.Enabled = false;
                CurrentTimeLeft = new TimeSpan(0, (int)numericUpDown1.Value, (int)numericUpDown2.Value, 0, 0);
                TotalMilliseconds = CurrentTimeLeft.TotalMilliseconds;
                label2.Text = CurrentTimeLeft.Hours.ToString("D2");
                label3.Text = CurrentTimeLeft.Minutes.ToString("D2");
                label4.Text = CurrentTimeLeft.Seconds.ToString("D2");
                LastUpdate = DateTime.Now;
                timer1.Start();
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
                TimeSpan diff = DateTime.Now - LastUpdate;
                CurrentTimeLeft -= diff;
                if (CurrentTimeLeft.TotalSeconds < 1.0)
                {
                    numericUpDown1.Enabled = true;
                    numericUpDown2.Enabled = true;
                    button1.Enabled = true;
                    label2.Text = "";
                    label3.Text = "";
                    label4.Text = "";
                    timer1.Stop();
                    return;
                }
                double totMsLeft = CurrentTimeLeft.TotalMilliseconds;
                double pct = totMsLeft / TotalMilliseconds;
                int value = (int)Math.Min(Math.Floor(pct * 500), 500.0);
                progressBar1.Value = 500 - value;
                LastUpdate = DateTime.Now;
                label2.Text = CurrentTimeLeft.Hours.ToString("D2");
                label3.Text = CurrentTimeLeft.Minutes.ToString("D2");
                label4.Text = CurrentTimeLeft.Seconds.ToString("D2");
            }
        }
     

  7. #7
    tsohGehT Tutorials.de Gastzugang
    Recht herzlichen Dank für die schnelle Antwort.

    Bei dieser dritten Möglichkeit mit C# funktioniert die Timerfunktion nicht - jedenfalls bei mir nicht. Könnte ein Gedankenfehler von mir sein:

    Eingefügt:
    2 NummericUpDown, 3 Label, 1 ProgressBar, 1 Timer, 1 Button

    In dem original Code Label 2-4 auf 1-3 gesetzt.
    -------------------------------------------------------------------------------------------------------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private TimeSpan CurrentTimeLeft;
    private DateTime LastUpdate;
    private double TotalMilliseconds;

    private void button1_Click(object sender, EventArgs e)
    {
    numericUpDown1.Enabled = false;
    numericUpDown2.Enabled = false;
    button1.Enabled = false;
    CurrentTimeLeft = new TimeSpan(0, (int)numericUpDown1.Value, (int)numericUpDown2.Value, 0, 0);
    TotalMilliseconds = CurrentTimeLeft.TotalMilliseconds;
    label1.Text = CurrentTimeLeft.Hours.ToString("D2");
    label2.Text = CurrentTimeLeft.Minutes.ToString("D2");
    label3.Text = CurrentTimeLeft.Seconds.ToString("D2");
    LastUpdate = DateTime.Now;
    timer1.Start();
    }

    private void timer1_Tick_1(object sender, EventArgs e)
    {
    TimeSpan diff = DateTime.Now - LastUpdate;
    CurrentTimeLeft -= diff;
    if (CurrentTimeLeft.TotalSeconds < 1.0)
    {
    numericUpDown1.Enabled = true;
    numericUpDown2.Enabled = true;
    button1.Enabled = true;
    label1.Text = "";
    label2.Text = "";
    label3.Text = "";
    timer1.Stop();
    return;
    }
    double totMsLeft = CurrentTimeLeft.TotalMilliseconds;
    double pct = totMsLeft / TotalMilliseconds;
    int value = (int)Math.Min(Math.Floor(pct * 500), 500.0);
    progressBar1.Value = 500 - value;
    LastUpdate = DateTime.Now;
    label1.Text = CurrentTimeLeft.Hours.ToString("D2");
    label2.Text = CurrentTimeLeft.Minutes.ToString("D2");
    label3.Text = CurrentTimeLeft.Seconds.ToString("D2");
    }
    }
    }
    -------------------------------------------------------------------------------------------------------------------------------------------------
     

  8. #8
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Was daran funktioniert nicht? Wie manifestiert sich der Fehler? (Für Code kannst du [csharp][/csharp] verwenden)
     

  9. #9
    tsohGehT Tutorials.de Gastzugang
    Also Fehler werden weder im Code noch beim Debugging angezeigt.
    Beim Klick auf Button1 startet anscheinend der Timer nicht oder die Verbindung zu den Labels ist fehlerhaft etc.. Jedenfalls verändern sich die ProgressBar und die Labels nicht bzw der angezeigte Wert.
     

  10. #10
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Dann hast du wohl deinem Button kein OnClick-Event mit der button1_click-Funktion als delegat hinzugefügt.
     

  11. #11
    tsohGehT Tutorials.de Gastzugang
    Ich hab es so wie im geposteten Code stehn. Mir war und ist immer noch nicht bewusst welcher Eintrag fehlen könnte:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
          private void button1_Click(object sender, EventArgs e)
            {
                numericUpDown1.Enabled = false;
                numericUpDown2.Enabled = false;
                button1.Enabled = false;
                CurrentTimeLeft = new TimeSpan(0, (int)numericUpDown1.Value, (int)numericUpDown2.Value, 0, 0);
                TotalMilliseconds = CurrentTimeLeft.TotalMilliseconds;
                label1.Text = CurrentTimeLeft.Hours.ToString("D2");
                label2.Text = CurrentTimeLeft.Minutes.ToString("D2");
                label3.Text = CurrentTimeLeft.Seconds.ToString("D2");
                LastUpdate = DateTime.Now;
                timer1.Start();
            }

    Dachte damit wäre der Button1 definiert....
     

  12. #12
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Du musst diese Funktion dem Button auch als OnClick-Event hinzufügen. Und dem Timer die Timer-Funktion als OnTick.
     

  13. #13
    tsohGehT Tutorials.de Gastzugang
    Könntest du diese Anweisung etwas genauer erklären? - Ich kenn mich mit C# überhaupt nicht aus(auch wenns VB ähnelt - bin halt ein ).
     

  14. #14
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Das macht man eigentlich direkt im Dialogeditor unter Events, aber du kannst es auch im Code machen. Beispielsweise im Konstruktor:
    Code csharp:
    1
    2
    3
    4
    5
    6
    
            public Form1()
            {
                InitializeComponent();
                button1.Click += new EventHandler(button1_Click);
                timer1.Tick += new EventHandler(timer1_Tick);
            }
     

  15. #15
    tsohGehT Tutorials.de Gastzugang
    Vielen Dank Cromon - t einwandfrei.
     

Ähnliche Themen

  1. Visual basic 2008 progressbar anwendug
    Von VB08 im Forum .NET Café
    Antworten: 21
    Letzter Beitrag: 02.10.10, 08:28
  2. Text in Progressbar oder transparente Progressbar
    Von mr b im Forum Delphi, Kylix, Pascal
    Antworten: 3
    Letzter Beitrag: 23.08.09, 13:56
  3. mit progressbar timer enablen
    Von Pr0ggggggi im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 24.09.08, 07:27
  4. VisualBasic 2008 Timer
    Von Sevi1604 im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 21.09.08, 12:58
  5. 2 Fragen zum Timer und eine Art ProgressBar
    Von Lenox im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 06.05.08, 19:30

Stichworte