Benutzer mit den meisten Antworten
A.Uhr

Frage
-
Hab das Problem dass meine Uhr nicht startetaber bei jeder Start aktualisiert er mir die Sek. anzeige aber stunde
und min. Anzeige ist immer noch gleich, obwohl ich t1_Start(); schon erwähnt habe(Timer)....
namespace Analog_Uhr_Versuch_2 { public partial class Form1 : Form { int sek = System.DateTime.Now.Second; int min = System.DateTime.Now.Minute; int stu = System.DateTime.Now.Hour; Timer t1 = new Timer(); public Form1() { this.Text = "UHR"; } private void Form1_Load(object sender, EventArgs e) { //Interval wann er ticken soll(Genauigkeit) t1.Interval = 1000; t1.Tick += new EventHandler(t1_Tick); t1.Start(); } protected override void OnPaint(PaintEventArgs e) { Graphics gra = e.Graphics; gra.DrawEllipse(new Pen(Color.Black, 2), 50, 50, 300, 300); gra.DrawEllipse(new Pen(Color.Black, 2), 200, 200, 2, 2); double x1 = 0; double x2 = 0; double y1 = 0; double y2 = 0; double nullpunktX = 200; double nullpunktY = 200; double grad = 0; int[,] Endpunkt = new int[60, 2]; int[,] Startpunkt = new int[60, 2]; int[,] Sekunde = new int[60, 2]; int[,] Minute = new int[60, 2]; int[,] Stunde = new int[60, 2]; int zaehler = 0; int laenge = 0; for (int i = 0; i < 60; i++) { //Beginn grad = grad + 6; x2 = Math.Sin(Math.PI / 180 * grad) * 150; y2 = Math.Cos(Math.PI / 180 * grad) * 150; x2 = x2 + nullpunktX; y2 = y2 + nullpunktY; Startpunkt[i, 0] = Convert.ToInt32(x2); Startpunkt[i, 1] = Convert.ToInt32(y2); //Ende zaehler++; if (zaehler % 5 == 0) { laenge = 100; } else { laenge = 130; } x1 = Math.Sin(Math.PI / 180 * grad) * laenge; y1 = Math.Cos(Math.PI / 180 * grad) * laenge; x1 = x1 + nullpunktX; y1 = y1 + nullpunktY; Endpunkt[i, 0] = Convert.ToInt32(x1); Endpunkt[i, 1] = Convert.ToInt32(y1); //Sekunde x2 = Math.Sin(Math.PI / 180 * grad) * 115; y2 = Math.Cos(Math.PI / 180 * grad) * 115; x2 = x2 + nullpunktX; y2 = y2 + nullpunktY; Sekunde[i, 0] = Convert.ToInt32(x2); Sekunde[i, 1] = Convert.ToInt32(y2); //Stunde x2 = Math.Sin(Math.PI / 180 * grad) * 105; y2 = Math.Cos(Math.PI / 180 * grad) * 105; x2 = x2 + nullpunktX; y2 = y2 + nullpunktY; Stunde[i, 0] = Convert.ToInt32(x2); Stunde[i, 1] = Convert.ToInt32(y2); //Minute x2 = Math.Sin(Math.PI / 180 * grad) * 115; y2 = Math.Cos(Math.PI / 180 * grad) * 115; x2 = x2 + nullpunktX; y2 = y2 + nullpunktY; Minute[i, 0] = Convert.ToInt32(x2); Minute[i, 1] = Convert.ToInt32(y2); } for (int i = 0; i < 60; i++) { gra.DrawLine(new Pen(Color.Black, 0), Startpunkt[i, 0], Startpunkt[i, 1], Endpunkt[i, 0], Endpunkt[i, 1]); } if (sek == 60) { sek = 0; } if (min == 60) { min = 0; } if (stu == 60) { stu = 0; } gra.DrawLine(new Pen(Color.Black, 0), 200, 200, Sekunde[sek, 1], Sekunde[sek, 0]); gra.DrawLine(new Pen(Color.Blue, 0), 200, 200, Minute[min, 1], Minute[min, 0]); gra.DrawLine(new Pen(Color.Yellow, 0), 200, 200, Stunde[stu, 1], Stunde[stu, 0]); } private void t1_Tick(object sender, EventArgs e) { if (min == 59 && sek == 59) { stu++; } if (sek == 59 ) { min++; } this.Refresh(); sek++; } } }
Antworten
-
Hallo,
als erstes fällt mir in deienm Code auf, das der aufRuf von InitializeComponent im Konstruktor fehlt. Ohne dem Aufruf wird kein Eventhandler etc registriert. Somit wird auch das Loaded-Event nicht ausgelöst.public Form1() { this.InitializeComponent(); this.Text = "UHR"; }
Und ganz nebenbei du könntest auch jedesmal DateTime.Now (oder eine eigene Instanz, wenn es nicht die aktuelle Zeit sein soll) abfragen als die Berechnung der neuen Sekunden etc. händisch durchzuführen. Dafür gibt es schließlich die DateTime-Klasse.<Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite | Code Beispiele | Facebook | Twitter | Snippets C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Donnerstag, 19. September 2013 10:14
- Als Antwort markiert Marcel RomaModerator Freitag, 4. Oktober 2013 08:53
-
Moin,
ich hab mir das mal kopiert.
Das ganze hat erst funktioniert nachdem ich mit einem Doppelklick auf die Form1 in der Entwurfs ansicht gegangen bin und eine neue Form1_Load angelegt hat.
Wenn es mal läuft sieht es ganz nett aus, woher hast Du das?
Grüße
- Bearbeitet sleepy007 Dienstag, 17. September 2013 07:12
- Als Antwort vorgeschlagen Ciprian Bogdan Donnerstag, 19. September 2013 09:16
- Als Antwort markiert Marcel RomaModerator Freitag, 4. Oktober 2013 08:54
-
...was mir noch aufgefallen ist... keine Ahnung, auf welchem Planeten Du lebst (ihr habt verdammt lange Arbeitstage, dafür aber auch lange Wochenenden...:) )
in onPaint schreibst Du
if (sek == 60)
{ sek = 0; }
if (min == 60)
{ min = 0; }
if (stu == 60)
{ stu = 0; }...stu == 60 ? also 12 oder 24 (je nachdem welche Anzeige Du wie bevorzugst) wären ok. Aber der 60 Stundentag ist mir persönlich zu stressig...;)
Gruß Ralf
- Als Antwort markiert Marcel RomaModerator Freitag, 4. Oktober 2013 08:55
Alle Antworten
-
Hallo,
als erstes fällt mir in deienm Code auf, das der aufRuf von InitializeComponent im Konstruktor fehlt. Ohne dem Aufruf wird kein Eventhandler etc registriert. Somit wird auch das Loaded-Event nicht ausgelöst.public Form1() { this.InitializeComponent(); this.Text = "UHR"; }
Und ganz nebenbei du könntest auch jedesmal DateTime.Now (oder eine eigene Instanz, wenn es nicht die aktuelle Zeit sein soll) abfragen als die Berechnung der neuen Sekunden etc. händisch durchzuführen. Dafür gibt es schließlich die DateTime-Klasse.<Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite | Code Beispiele | Facebook | Twitter | Snippets C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Donnerstag, 19. September 2013 10:14
- Als Antwort markiert Marcel RomaModerator Freitag, 4. Oktober 2013 08:53
-
Moin,
ich hab mir das mal kopiert.
Das ganze hat erst funktioniert nachdem ich mit einem Doppelklick auf die Form1 in der Entwurfs ansicht gegangen bin und eine neue Form1_Load angelegt hat.
Wenn es mal läuft sieht es ganz nett aus, woher hast Du das?
Grüße
- Bearbeitet sleepy007 Dienstag, 17. September 2013 07:12
- Als Antwort vorgeschlagen Ciprian Bogdan Donnerstag, 19. September 2013 09:16
- Als Antwort markiert Marcel RomaModerator Freitag, 4. Oktober 2013 08:54
-
...was mir noch aufgefallen ist... keine Ahnung, auf welchem Planeten Du lebst (ihr habt verdammt lange Arbeitstage, dafür aber auch lange Wochenenden...:) )
in onPaint schreibst Du
if (sek == 60)
{ sek = 0; }
if (min == 60)
{ min = 0; }
if (stu == 60)
{ stu = 0; }...stu == 60 ? also 12 oder 24 (je nachdem welche Anzeige Du wie bevorzugst) wären ok. Aber der 60 Stundentag ist mir persönlich zu stressig...;)
Gruß Ralf
- Als Antwort markiert Marcel RomaModerator Freitag, 4. Oktober 2013 08:55