NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Michaal.K
Člen
Avatar
Michaal.K:3.6.2016 8:51

Ahoj,
potřebuju v aplikaci udělat odpočet času. Uživatel zadá například, že chce odpočet 1 hodinu a 5minut. Takže v aplikaci se v labelu objeví odpočet 01:05 a bude odpočítávat. A když by se dojelo na nulu tak by odpočet začal znova na 01:05 a tak pořád dokola.
Zkoušel jsem to udělat přes timer a timespan. Takže když odstartuju timer tak uložím aktuální čas a chci přičíst tu zadanou 1 hodinu a 5minut a to mi právě nejde. A v události timeru tick chci pak od připočteného času odečítat aktuální čas přes timespan a zobrazovat v labelu.
A ještě nevím jak poubehnutí odpočtu (dostanu se na nulu) to celé zopakovat aby to mohlo běžet několik dní...
Díky moc

Editováno 3.6.2016 8:52
 
Odpovědět
3.6.2016 8:51
Avatar
Odpovídá na Michaal.K
sadlomaslox25:3.6.2016 9:21

hod jsem nejaky kod.

 
Nahoru Odpovědět
3.6.2016 9:21
Avatar
Michaal.K
Člen
Avatar
Michaal.K:3.6.2016 9:34

Tak zatím to mám takto a funguje to:

private void timer1_Tick(object sender, EventArgs e)
        {
            TimeSpan ts = startOdpoctu - DateTime.Now;
            labelOdpocet.TextAlign = ContentAlignment.MiddleCenter;
            labelOdpocet.Text = ts.ToString();
        }

        private void buttonStartCasovac_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;

            int hodinyOdpocet = Convert.ToInt32(numericUpDownHodiny.Value);
            int minutyOdpocet = Convert.ToInt32(numericUpDownMinuty.Value);

            startOdpoctu = DateTime.Now;
            startOdpoctu = startOdpoctu.AddHours(hodinyOdpocet);
            startOdpoctu = startOdpoctu.AddMinutes(minutyOdpocet);
        }

Udalost interval timer tick je 100. Jen nevím jestli jsou dobře přechody když uživatel zadá 50min a aktuální čas je 9:50hod a to samé nevím u dnů (když by bylo před půlnocí).
Díky

 
Nahoru Odpovědět
3.6.2016 9:34
Avatar
STP
Člen
Avatar
STP:3.6.2016 11:12

Nestačilo by to takto?

static void Main(string[] args)
   {
       System.Timers.Timer t = new System.Timers.Timer();
       t.AutoReset = true;
       t.Interval = 3900000; // hodina a pet minut v ms  (65 minut * 60  * 1000 (myslim :) ))
       t.Elapsed += T_Elapsed;
       t.Start();
   }

   private static void T_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
   {
       //Interval ktery chceme
   }
Nahoru Odpovědět
3.6.2016 11:12
Když umřít, tak online!!!
Avatar
STP
Člen
Avatar
Odpovídá na STP
STP:3.6.2016 11:22

Zapoměl jsem že chceš v labelu zobrazovat čas :( Tímto způsobem to nepůjde. Sry...
Pak tedy opravdu použit System.Window­s.Forms.Timer ...

Editováno 3.6.2016 11:23
Nahoru Odpovědět
3.6.2016 11:22
Když umřít, tak online!!!
Avatar
Michaal.K
Člen
Avatar
Odpovídá na sadlomaslox25
Michaal.K:3.6.2016 14:38

Tak jsem to zatím udělal jak jsem psal předtím a zatím to funguje ;-)
Snad budou dobře i ty přechody mezi hodinami a dny...

 
Nahoru Odpovědět
3.6.2016 14:38
Avatar
Odpovídá na Michaal.K
sadlomaslox25:3.6.2016 20:43

prechody budou fungovat a opakovani se udela prakticky stejne tak jak si to vyvolat tzn. ze kdyz startOdpoctu - DateTime.Now < 0 tak tak znova vypocitas startOdpoctu.

 
Nahoru Odpovědět
3.6.2016 20:43
Avatar
Michaal.K
Člen
Avatar
Odpovídá na sadlomaslox25
Michaal.K:7.6.2016 9:31

Tak snad to funguje. Díky za pomoc.

 
Nahoru Odpovědět
7.6.2016 9:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.