Benutzer mit den meisten Antworten
Fenster im Vordergrund, Countdown, Stoppuhr

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
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:mms")
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 -
Mein Code ist so geschrieben das man das Format so eingeben muss: hh:mm
s --> Stunde:Minute
ekunde. 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 einmacht
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 -
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:mms")
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 -
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. -
Mein Code ist so geschrieben das man das Format so eingeben muss: hh:mm
s --> Stunde:Minute
ekunde. 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 einmacht