Entwickler-Ecke
WinForms - Stopuhr mit Button starten und sekundenweise anzeigen lassen
Delete - Fr 25.06.10 12:33
Titel: Stopuhr mit Button starten und sekundenweise anzeigen lassen
Hallo Liebe C#ler ;)
Da sich das alte Problem nun schnell von allein gelöst hatte, stehe ich nun vor einem neuen Problem. Und zwar habe ich vor eine Stopuhr zu starten falls man den Start/Stop Button drückt, daraufhin soll die laufende Zeit sekundenweise z.b. in einer Textbox angezeigt werden(vllt habt ihr ja bessere Lösungsvorschläge)! Drückt man nochmals auf diesen Button belibt die zeit stehen und kann als Variable gespeichert werden..
Für ein paar neue Anregungen oder Lösungsvorschläge wäre ich sehr erfreut ;))
Mfg
Reichenberg
Delete - Fr 25.06.10 12:57
reichenberg hat folgendes geschrieben : |
Für ein paar neue Anregungen oder Lösungsvorschläge wäre ich sehr erfreut ;)) |
Was für
neue Anregungen erwartest du? wo ist das Problem einen Timer zu starten und die Zeit in einem Edit ausgeben zu lassen?
Delete - Fr 25.06.10 13:07
Ich habe schon einige Codebeispiele ausprobiert aber dabei sind immer fehler aufgetreten.. Einen Timer habe ich bereits der auch funktioniert mit der funktion start stop allerdings kriege ich diese laufende zeit nicht angezeigt :( hättest du da evt. ein codebeispiel?
Delete - Fr 25.06.10 13:10
reichenberg hat folgendes geschrieben : |
Ich habe schon einige Codebeispiele ausprobiert aber dabei sind immer fehler aufgetreten. |
Dann nenne uns doch die Fehler.
danielf - Fr 25.06.10 13:10
Wenn das Start/Stop funktioniert brauchst du lediglich einen Timer. Den setzt du auf deinen Update-Interval (vlt. 1 Sekunde). In dem Timer-Elapsed Event zeigst du dann den Fortschritt von der StopWatch an.. und fertig. Ggf. benötigst du noch ein Invoke. Aber setzt es erstmal um, dann kann man die bei den weiteren Schritten helfen.
Gruß
Delete - Fr 25.06.10 14:23
hättest du dazu evt. ein code beispiel?
hier mein bisheriger code der form..
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: 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: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
| 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; using Reygers.Data; using System.IO; using System.Diagnostics; using System.Threading;
namespace Programm { public partial class bearbeitung : Form { public bearbeitung() { InitializeComponent(); }
private void btn_save_click(object sender, MouseEventArgs e) { SaveFileDialog dlgSave = new SaveFileDialog(); dlgSave.Filter = "Textdateien (*.txt) | *.txt| Alle Dateien (*.*) | *.*"; string FileName = ""; if (dlgSave.ShowDialog() == DialogResult.OK) { FileName = dlgSave.FileName; } string b = Convert.ToString(dateTimePicker1.Value); StreamWriter sw = File.CreateText(FileName); sw.WriteLine(b); sw.WriteLine(a); sw.WriteLine(comboBoxEx1.Text); sw.WriteLine(comboBoxEx2.Text); sw.WriteLine(comboBoxEx3.Text); sw.WriteLine(richTextBox1.Text); sw.Flush(); sw.Close(); string FileName2 = "test.txt"; richTextBox1.SaveFile(FileName2, RichTextBoxStreamType.PlainText); }
private void btn_exit_click(object sender, MouseEventArgs e) { this.Close(); }
private void bearbeitung_Load(object sender, EventArgs e) { Database db = new Database("...", "account database"); DataTable personTable = db.Query(" SELECT assistantID, assistantName FROM tbl_assistant WHERE telephoneNO ='...'"); comboBoxEx1.DataSource = personTable; comboBoxEx1.ValueMember = "assistantID"; comboBoxEx1.DisplayMember = "assistantName";
Database db2 = new Database("...", "account database"); DataTable customerTable = db.Query(" SELECT customerID, company FROM tbl_customer WHERE telephoneNO <>'...'"); comboBoxEx2.DataSource = customerTable; comboBoxEx2.ValueMember = "customerID"; comboBoxEx2.DisplayMember = "company";
Database db3 = new Database("...", "account database"); DataTable contactTable = db.Query(" SELECT assistantID, assistantName FROM tbl_assistant WHERE telephoneNO <>'...'"); comboBoxEx3.DataSource = contactTable; comboBoxEx3.ValueMember = "assistantID"; comboBoxEx3.DisplayMember = "assistantName"; }
string a; int time; DateTime start = DateTime.MinValue; DateTime end = DateTime.MinValue;
private void btn_startstop_click(object sender, System.EventArgs e) {
}
}
} |
danielf - Fr 25.06.10 15:02
Wo ist den da der Timer? und der Teil mit der StopWatch ist ja kommentiert. Den anderen Teil braucht man nicht.
Du machst eine Klassen Timer & StopWatch:
C#-Quelltext
1: 2:
| private System.Timers.Timer _timer = new System.Timers.Timer(125); private System.Diagnostics.Stopwatch _stopWatch = new System.Diagnostics.Stopwatch(); |
Bei der Instanziierung legst du fest welche Methode er aufrufen soll:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public bearbeitung() { InitializeComponent();
_timer.Elapsed += new System.Timers.ElapsedEventHandler(ShowTime); } |
In der Methode zeigst du die vergangene Zeit an (weil das Event von einem anderen Thread geworfen wird ist ein Invoke notwendig):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| private void ShowTime(object sender, EventArgs e) { this.Invoke(new ShowTimeDelegate(ShowTime), _stopWatch.Elapsed); }
private void ShowTime(TimeSpan elapsedTime) { this.lTime.Text = string.Format("{0:00}:{1:00}:{2:000}", elapsedTime.Minutes, elapsedTime.Seconds, elapsedTime.Milliseconds); } |
Das Delegate sieht dann so aus:
C#-Quelltext
1:
| private delegate void ShowTimeDelegate(TimeSpan elapsedTime); |
Dann brauchst du nur noch ein Button der das ganze Started und Stopt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private void bToggle_Click(object sender, EventArgs e) { if (_stopWatch.IsRunning) { _stopWatch.Stop(); _timer.Enabled = false; } else { _stopWatch.Reset(); _stopWatch.Start(); _timer.Enabled = true; } } |
Das wars .... verstanden??
Delete - Fr 25.06.10 15:06
Dann werde ich mal deine Lösung ausprobieren.
Und vielen dank schonmal für die Lösung danielf.
EDIT:
Zitat: |
this.lTime.Text = string.Format("{0:00}:{1:00}:{2:000}", |
wo wird denn lTime definiert oder was ist lTime?
danielf - Fr 25.06.10 15:27
lTimer ist ein Label-Control. Benutze den Designer um es auf deinem Form zu platzieren.
Delete - Fr 25.06.10 15:52
Irg klappts noch nich... Das Prog startet zwar aber im Lbel wird der Wert nicht angezeigt :(
Erster Teil:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| public partial class bearbeitung : Form { private System.Timers.Timer _timer = new System.Timers.Timer(125); private System.Diagnostics.Stopwatch _stopWatch = new System.Diagnostics.Stopwatch();
public bearbeitung() { InitializeComponent(); _timer.Elapsed += new System.Timers.ElapsedEventHandler(ShowTime);
} |
Zweiter Teil:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| private void btn_startstop_click(object sender, System.EventArgs e) {
} private delegate void ShowTimeDelegate(TimeSpan elapsedTime);
private void ShowTime(object sender, EventArgs e) { this.Invoke(new ShowTimeDelegate(ShowTime), _stopWatch.Elapsed); }
private void ShowTime(TimeSpan elapsedTime) { this.lTime.Text = string.Format("{0:00}:{1:00}:{2:000}", elapsedTime.Minutes, elapsedTime.Seconds, elapsedTime.Milliseconds); } |
Ralf Jansen - Fr 25.06.10 16:13
Den Timer solltest du auch starten.
Kha - Sa 26.06.10 10:57
danielf hat folgendes geschrieben : |
(weil das Event von einem anderen Thread geworfen wird ist ein Invoke notwendig) |
Ausführliche Lösung, aber warum denn keinen System.Windows.Forms.Timer?
danielf - Sa 26.06.10 11:46
Hab ich mir ehrlich gesagt keine speziellen Gedanken darüber gemacht. Hab mir gerade mal die Unterschiede angeschaut und du hast wohl recht.. ist passender :)
Viel Spaß, Reichenberg :)
Delete - Mo 28.06.10 09:53
Alles klar. Vielen dank für eure Hilfe. Das Programm klappt jetzt soweit.
Mfg
reichenberg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!