none
Fenster im Vordergrund, Countdown, Stoppuhr RRS feed

  • Frage

  • Hallo,

    Ich habe ein kleines Programm geschrieben, welches die Uhrzeit anzeigt.
    Meine Fragen:

    1. Wie mache ich es, dass wenn man auf einen Button klickt, das Fenster (Form1) immer im Vordergrund bleibt?

    2. Wie mache ich, dass ein Timer (Timer1) einen Countdown macht, von der Zeit an, welche in einem Textfeld(TextBox1) steht?

    3. Wie mache ich mit einem Timer(Timer1) eine Stopuhr mit zwei Buttons (Button1 = Pause, Button2 = Play)`?


    Danke schon mal...


    MFG Stephan Rüschenbaum
    Freitag, 2. Januar 2009 13:11

Antworten

  • Ich hab mir die Freiheit genommen dieses Beispiel noch einmal auf einem anderen Weg zu lösen, da die Lösung mit den If- Anweisungen doch leicht zu Ungenauigkeiten auf Computern mit schlechter Prozessorleistung führt.

    Public Class Form1
        Dim Stopuhr, Countdown As DateTime
        Dim StopTicks, CountTicks As Integer
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.TopMost = True
        End Sub
        Private Sub btnSS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    btnSS.Click
            Me.Timer2.Start()
            StopTicks = 0
        End Sub
        Private Sub
    btnSP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSP.Click
            If Me.Timer2.Enabled = True Then
                Me.Timer2.Enabled = False
            Else
                Me.Timer2.Enabled = True
            End If
        End Sub

        Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
            StopTicks += 1
            Me.TextBox2.Text = Stopuhr.AddSeconds(StopTicks)
        End Sub

        Private Sub
    btnCS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCS.Click
            If Me.TextBox1.Text.IndexOf(":") = 2 And Me.TextBox1.Text.LastIndexOf(":") = 5 And Me.TextBox1.TextLength = 8 Then
                Me.Timer3.Start()
                Countdown.ToLongTimeString()
                Countdown = Me.TextBox1.Text
                CountTicks = 0
            Else
                MsgBox("Bitte geben Sie dieses Format ein: hh:mmTongue Tieds")
            End If
        End Sub

        Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
            Try 'Dies verhindert einen Programm Absturz, falls ein Fehler auftritt
                CountTicks -= 1
                Me.TextBox3.Text = Countdown.AddSeconds(CountTicks)
            Catch ex As Exception
            End Try
        End Sub
    End Class

    zur Erklärung
    btnSS = ButtonStopuhrStart; btnSP = ButtonStopuhrPause; btnCS = ButtonCountdownStart

    Textbox1 = Countdown Eingabe;
    Textbox3 = Countdown Ausgabe; Textbox2 = Stopuhr
    Montag, 5. Januar 2009 12:40
  • Mein Code ist so geschrieben das man das Format so eingeben muss: hh:mmTongue Tieds --> Stunde:MinuteTongue Tiedekunde. Ich hab auf die schnelle nicht ausprobiert ob es auch mit anderen Formaten geht. Aber um das umzuändern braucht man ja nur ein kleines bisschen herumexperimentieren.

    Ps.: Ich hab erst jetzt bemerkt, das er statt ": s" immer ein Tongue Tied macht
    Dienstag, 6. Januar 2009 12:13

Alle Antworten

  • Das es immer im Vordergrund ist heißt me.topmost = true

    Nun nehmen wir mal an, dass du auch die Zehntelsekunden mit zählen willst. Dann sollte der Timerintarval auf 100 sein.
    nun sobald du auf den Button klickst übergibt der Button einer globalen Variable den Wert 1 für Countown oder 0 für Stopuhr und startet den Timer mit Timer.Start. Im Code des Timers (Timer.tick) steht dann eine If anweisung. Bsp.:

    If GlobaleVarible = 1 then

    Zehntel-= 1

    else

    Zehntel+=1

    end if

    so nun hast du das hinauf und runterzählen der Hunderstel.

    die Umkonvertierung (ist eigentlich nicht das korrekte Wort für meine Idee) der Zeit sollte eigentlich kein Problem darstellen.
    Kannst du ganz leicht mit einer if und mehreren Variablen machen. Bsp.:

    if
    Zehntel= 10 then

    Zehntel= 0

    Sekunde += 1

    end if

    mit me.timer.enabled = false pausiert man den Timer

    Samstag, 3. Januar 2009 16:27
  • Ich hab mir die Freiheit genommen dieses Beispiel noch einmal auf einem anderen Weg zu lösen, da die Lösung mit den If- Anweisungen doch leicht zu Ungenauigkeiten auf Computern mit schlechter Prozessorleistung führt.

    Public Class Form1
        Dim Stopuhr, Countdown As DateTime
        Dim StopTicks, CountTicks As Integer
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.TopMost = True
        End Sub
        Private Sub btnSS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    btnSS.Click
            Me.Timer2.Start()
            StopTicks = 0
        End Sub
        Private Sub
    btnSP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSP.Click
            If Me.Timer2.Enabled = True Then
                Me.Timer2.Enabled = False
            Else
                Me.Timer2.Enabled = True
            End If
        End Sub

        Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
            StopTicks += 1
            Me.TextBox2.Text = Stopuhr.AddSeconds(StopTicks)
        End Sub

        Private Sub
    btnCS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCS.Click
            If Me.TextBox1.Text.IndexOf(":") = 2 And Me.TextBox1.Text.LastIndexOf(":") = 5 And Me.TextBox1.TextLength = 8 Then
                Me.Timer3.Start()
                Countdown.ToLongTimeString()
                Countdown = Me.TextBox1.Text
                CountTicks = 0
            Else
                MsgBox("Bitte geben Sie dieses Format ein: hh:mmTongue Tieds")
            End If
        End Sub

        Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
            Try 'Dies verhindert einen Programm Absturz, falls ein Fehler auftritt
                CountTicks -= 1
                Me.TextBox3.Text = Countdown.AddSeconds(CountTicks)
            Catch ex As Exception
            End Try
        End Sub
    End Class

    zur Erklärung
    btnSS = ButtonStopuhrStart; btnSP = ButtonStopuhrPause; btnCS = ButtonCountdownStart

    Textbox1 = Countdown Eingabe;
    Textbox3 = Countdown Ausgabe; Textbox2 = Stopuhr
    Montag, 5. Januar 2009 12:40
  • Hallo,

    danke erstmal für diese wirklich super Antwort es geht alles soweit, bis auf, dass wenn ich in TextBox1 z.B: 04:47 (hh:mm) eingebe, die MsgBox("Bitte geben Sie dieses Format ein: hh:mmTongue Tieds") immer noch kommt, obwohl das Format doch richtig ist oder?

     MFG Stephan R.
    Montag, 5. Januar 2009 12:51
  • Mein Code ist so geschrieben das man das Format so eingeben muss: hh:mmTongue Tieds --> Stunde:MinuteTongue Tiedekunde. Ich hab auf die schnelle nicht ausprobiert ob es auch mit anderen Formaten geht. Aber um das umzuändern braucht man ja nur ein kleines bisschen herumexperimentieren.

    Ps.: Ich hab erst jetzt bemerkt, das er statt ": s" immer ein Tongue Tied macht
    Dienstag, 6. Januar 2009 12:13
  • Das stimmt, aber ich habe es ja jetzt schon herausgefunden

    Naja danke an alle

    MFG Stephan R.
    Dienstag, 6. Januar 2009 12:16