Autor |
Beitrag |
reichenberg
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 25.06.10 12:33
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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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?
|
|
reichenberg
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: 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ß
|
|
reichenberg
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 25.06.10 14:23
hättest du dazu evt. ein code beispiel?
hier mein bisheriger code der form..
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
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: 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??
Für diesen Beitrag haben gedankt: Kha
|
|
reichenberg
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Fr 25.06.10 15:27
lTimer ist ein Label-Control. Benutze den Designer um es auf deinem Form zu platzieren.
|
|
reichenberg
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 25.06.10 15:52
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 25.06.10 16:13
Den Timer solltest du auch starten.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: 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 
|
|
reichenberg
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 28.06.10 09:53
Alles klar. Vielen dank für eure Hilfe. Das Programm klappt jetzt soweit.
Mfg
reichenberg
|
|