none
Stoppuhr mit Signal RRS feed

  • Frage

  • Hallo,

    ich habe vor kurzem begonnen C# zu lernen. Jetzt würde ich gerne eine Stoppuhr programmieren und wollt fragen ob ihr mir beim Code helfen könnt. Hier mal kurz die Funktionen: Timer soll per Button gestarten werden können und gestoppt werden können. Allerdings soll er automatisch nach dem Start bis auf 2 minuten zählen dann ein Signalsound ausgeben und dann auf 50 Sekunden zählen und wieder einen Signalsound. Dass ganze soll so lange immer wieder passieren bis man auf Stop klickt.

     

    Ich wäre euch sehr dankbar wenn ihr mir den Code geben würdet, oder mir zumindest sagt wie ich das Programm aufbauen muss, welche Funktionen usw... Ich nutze Visual C# 2010 und Windows Forms.

     

     

    Mfg

    Marko


    • Bearbeitet germanman Freitag, 2. September 2011 16:34
    Freitag, 2. September 2011 16:34

Antworten

  • Schau dir mal die Timer-Klasse an: http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx.
    MVP Data Platform Development My blog
    Freitag, 2. September 2011 17:27
  • Hallo Marko,

    hier ein Beispiel:

    using System;
    using System.Windows.Forms;
    
    //Timer soll per Button gestartet werden können und gestoppt werden können. 
    //Allerdings soll er automatisch nach dem Start bis auf 2 minuten zählen 
    //dann ein Signalsound ausgeben und dann auf 50 Sekunden zählen und wieder 
    //einen Signalsound. Dass ganze soll so lange immer wieder passieren bis man auf Stop klickt.
    
    namespace StoppuhrDemo
    {
        public partial class Form1 : Form
        {
            Timer zeitgeber;
            Button btnStart = new Button { Text = "Start", Top = 0 };
            Button btnStop = new Button { Text = "Stop", Top = 30 };
            Label lblAnzeige = new Label { Left=10,Top = 60, AutoSize = true };
            DateTime startZeit;
    
            /// <summary>1 Sekunde</summary>
            int zeitgeberIntervall = (int)TimeSpan.FromSeconds(1).TotalMilliseconds;
    
            /// <summary>Zeit, bis zum ersten Ton</summary>
            TimeSpan maximalZeit1 = TimeSpan.FromMinutes(2);
    
            /// <summary>Zeit, bis zum zweiten Ton</summary>
            TimeSpan maximalZeit2 = new TimeSpan(0,2,50);
    
            public Form1()
            {
                InitializeComponent();
                Text = "Zeitgeber-Demo";
                Controls.Add(btnStart);
                Controls.Add(btnStop);
                Controls.Add(lblAnzeige);
                btnStart.Click += BtnStart_Click;
                btnStop.Click += BtnStop_Click;
                zeitgeber = new Timer();
                zeitgeber.Interval = zeitgeberIntervall;
                zeitgeber.Tick += Zeitgeber_Tick;
            }
    
            void BtnStart_Click(object sender, EventArgs e)
            {
                startZeit = DateTime.Now;
                ZeitAnzeigeRefresh();
                zeitgeber.Start();
            }
    
            void BtnStop_Click(object sender, EventArgs e)
            {
                zeitgeber.Stop();
            }
    
            void Zeitgeber_Tick(object sender, EventArgs e)
            {
                ZeitAnzeigeRefresh();
                if (IstZeitImBereich(maximalZeit1)) { Console.Beep(); return; }
                if (IstZeitImBereich(maximalZeit2)) 
                {
                    Console.Beep(1000,300); startZeit = DateTime.Now;
                }             
            }
    
            private bool IstZeitImBereich(TimeSpan maxZeit)
            {
                return DifferenzZeit() > maxZeit &&
                    DifferenzZeit() < EinIntervallWeiter(maxZeit);
            }
    
            private TimeSpan EinIntervallWeiter(TimeSpan maximalZeit1)
            {
                return maximalZeit1 + TimeSpan.FromMilliseconds(zeitgeberIntervall);
            }
    
            private void ZeitAnzeigeRefresh()
            {
                lblAnzeige.Text = DifferenzZeit().ToString(@"mm\:ss");
            }
    
            private TimeSpan DifferenzZeit()
            {
                return DateTime.Now - startZeit + TimeSpan.FromMilliseconds(500);
            }
        }
    }
    
    

    _____________

    Sehr genaue "Stoppuhr"-Zeiten kann man übrigens mit der Stopwatch-Klasse erhalten.
    Aber für Deine Zwecke ist mein Code-Beispiel am geeignetsten.

     

     


    ciao Frank
    Freitag, 2. September 2011 18:42

Alle Antworten

  • Schau dir mal die Timer-Klasse an: http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx.
    MVP Data Platform Development My blog
    Freitag, 2. September 2011 17:27
  • Hallo Marko,

    hier ein Beispiel:

    using System;
    using System.Windows.Forms;
    
    //Timer soll per Button gestartet werden können und gestoppt werden können. 
    //Allerdings soll er automatisch nach dem Start bis auf 2 minuten zählen 
    //dann ein Signalsound ausgeben und dann auf 50 Sekunden zählen und wieder 
    //einen Signalsound. Dass ganze soll so lange immer wieder passieren bis man auf Stop klickt.
    
    namespace StoppuhrDemo
    {
        public partial class Form1 : Form
        {
            Timer zeitgeber;
            Button btnStart = new Button { Text = "Start", Top = 0 };
            Button btnStop = new Button { Text = "Stop", Top = 30 };
            Label lblAnzeige = new Label { Left=10,Top = 60, AutoSize = true };
            DateTime startZeit;
    
            /// <summary>1 Sekunde</summary>
            int zeitgeberIntervall = (int)TimeSpan.FromSeconds(1).TotalMilliseconds;
    
            /// <summary>Zeit, bis zum ersten Ton</summary>
            TimeSpan maximalZeit1 = TimeSpan.FromMinutes(2);
    
            /// <summary>Zeit, bis zum zweiten Ton</summary>
            TimeSpan maximalZeit2 = new TimeSpan(0,2,50);
    
            public Form1()
            {
                InitializeComponent();
                Text = "Zeitgeber-Demo";
                Controls.Add(btnStart);
                Controls.Add(btnStop);
                Controls.Add(lblAnzeige);
                btnStart.Click += BtnStart_Click;
                btnStop.Click += BtnStop_Click;
                zeitgeber = new Timer();
                zeitgeber.Interval = zeitgeberIntervall;
                zeitgeber.Tick += Zeitgeber_Tick;
            }
    
            void BtnStart_Click(object sender, EventArgs e)
            {
                startZeit = DateTime.Now;
                ZeitAnzeigeRefresh();
                zeitgeber.Start();
            }
    
            void BtnStop_Click(object sender, EventArgs e)
            {
                zeitgeber.Stop();
            }
    
            void Zeitgeber_Tick(object sender, EventArgs e)
            {
                ZeitAnzeigeRefresh();
                if (IstZeitImBereich(maximalZeit1)) { Console.Beep(); return; }
                if (IstZeitImBereich(maximalZeit2)) 
                {
                    Console.Beep(1000,300); startZeit = DateTime.Now;
                }             
            }
    
            private bool IstZeitImBereich(TimeSpan maxZeit)
            {
                return DifferenzZeit() > maxZeit &&
                    DifferenzZeit() < EinIntervallWeiter(maxZeit);
            }
    
            private TimeSpan EinIntervallWeiter(TimeSpan maximalZeit1)
            {
                return maximalZeit1 + TimeSpan.FromMilliseconds(zeitgeberIntervall);
            }
    
            private void ZeitAnzeigeRefresh()
            {
                lblAnzeige.Text = DifferenzZeit().ToString(@"mm\:ss");
            }
    
            private TimeSpan DifferenzZeit()
            {
                return DateTime.Now - startZeit + TimeSpan.FromMilliseconds(500);
            }
        }
    }
    
    

    _____________

    Sehr genaue "Stoppuhr"-Zeiten kann man übrigens mit der Stopwatch-Klasse erhalten.
    Aber für Deine Zwecke ist mein Code-Beispiel am geeignetsten.

     

     


    ciao Frank
    Freitag, 2. September 2011 18:42
  • Hallo germanman,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Montag, 12. September 2011 09:12
    Moderator