ERLEDIGT
NEIN
NEIN
ANTWORTEN
16
16
ZUGRIFFE
2355
2355
EMPFEHLEN
-
27.12.08 13:35 #1spamferkel 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!
-
Zeig doch mal bissel Code.
-
jo, bisschen code, immer mal zeigen!
-
Bitte auch mal auf das Erstellungsdatum achten. Der Threadstarter hat sich 1,5 Jahre nicht gerührt!
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
30.06.10 16:48 #5tsohGehT 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.
-
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"); } }
-
30.06.10 18:29 #7tsohGehT 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");
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------
-
Was daran funktioniert nicht? Wie manifestiert sich der Fehler? (Für Code kannst du [csharp][/csharp] verwenden)
-
30.06.10 18:42 #9tsohGehT 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.
-
Dann hast du wohl deinem Button kein OnClick-Event mit der button1_click-Funktion als delegat hinzugefügt.
-
30.06.10 18:51 #11tsohGehT 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....
-
Du musst diese Funktion dem Button auch als OnClick-Event hinzufügen. Und dem Timer die Timer-Funktion als OnTick.
-
30.06.10 18:59 #13tsohGehT 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
).
-
-
30.06.10 19:13 #15tsohGehT Tutorials.de Gastzugang
Vielen Dank Cromon - t einwandfrei.
Ähnliche Themen
-
Visual basic 2008 progressbar anwendug
Von VB08 im Forum .NET CaféAntworten: 21Letzter Beitrag: 02.10.10, 08:28 -
Text in Progressbar oder transparente Progressbar
Von mr b im Forum Delphi, Kylix, PascalAntworten: 3Letzter Beitrag: 23.08.09, 13:56 -
mit progressbar timer enablen
Von Pr0ggggggi im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 24.09.08, 07:27 -
VisualBasic 2008 Timer
Von Sevi1604 im Forum .NET CaféAntworten: 4Letzter Beitrag: 21.09.08, 12:58 -
2 Fragen zum Timer und eine Art ProgressBar
Von Lenox im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 06.05.08, 19:30





Zitieren

Login





