» Poradna » Programy

Stopky v C#

 |   | 

Ahojky Protože jste mi minule moc pěkně pomohli s kalkulačkou v C#, tak se na vás obracím znovu.

Ve škole jsem udělali jednoduché stopky pomocí timer.

Máme label, ve kterém je text Čas: 1s a pak 3 tlačítka, Start, Stop, Smaž. Vše mi normálně funguje, ale dostali jsme Dú a to, že naše stopky počítají ve vteřinách a je problém, třeba 500s

Takže máme za úkol to udělat tak, aby místo 61s bylo napsáno 1min1s a pokračovalo to normálně dál 1min2s a tak dále. Hledal jsem na internetu, vím že je něco jako new imespan (0,0,1), ale vůbec nevím jak to použít a tak.

Doufám, že se znovu úspěšně dostaneme ke konci. Děkju ji moc za případné odpovědi a rady.

Mohlo by vás také zajímat

Odpovědi na otázku

 | 

TimeSpan aktualnycas = new TimeSpan( 0, 0, pocitadlosekund );
labelZobrazCas.Text = aktualnycas.ToString();

toto ti zobrazi spravne cas v tvare hodiniek tj 00:00:00 zmenu na text typu 1 min 2 s uy dufam zvladnes aj sam

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Máto jeden háček a to velký:
The best overloaded method match for 'System.TimeSpan.TimeSpan(int, int, int)' has some invalid arguments C:\Users\Radek\Documents\Visual Studio 2008\Projects\Prvni Aplikace\Timer\Form1.cs 25 36 Timer

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

No a co se snažíš narvat do toho pocitadlasekund?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Mno asi bude lepší, sem zkopírovat kód, pak se bude radit lépe. Toto jsou moje funkční stopky.
Jenom nevím, co upravit podle první odpovědi, aby to fungovalo.

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;

namespace Timer
{
public partial class Form1 : Form
{
double i = 0;
public Form1()
{
InitializeComponent();
}

private void timer1_Tick(object sender, EventArgs e)
{
i = i + 0.1;
label1.Text = "Čas: " + i + " s";
}

private void btnStart_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
label1.Text = "Čas: " + i + " s";

}

private void btnStop_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
label1.Text = "Čas: " + i + " s";

}

private void btnSmazat_Click(object sender, EventArgs e)
{
i = 0;
label1.Text = "Čas: " + i + "s";
}
}
}


Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

Tomuhle bych funkční stopky neříkal, za chvíli se ti začnou pěkně zpožďovat.

DateTime start;

private void timer1_Tick(object sender, EventArgs e)
{
TimeSpan ts = DateTime.Now - start;
label1.Text = String.Format("Čas: {0} s", ts);
}

private void btnStart_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
start = DateTime.Now;
label1.Text = "Čas: 0 s";
}

private void btnStop_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
TimeSpan ts = DateTime.Now - start;
label1.Text = String.Format("Čas: {0} s", ts);
}

private void btnSmazat_Click(object sender, EventArgs e)
{
TimeSpan ts = DateTime.Now - start;
label1.Text = String.Format("Čas: {0} s", ts);
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | 

Oprava:
private void btnSmazat_Click(object sender, EventArgs e)
{
label1.Text = "Čas: 0 s"
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Presne jak pise wikan. Ty "stopky" meri cas velice nepresne. Na 1minute maji odchylku asi 5s.

Kdyztak tady si to muzes porovnat (mas tam napsanou i chytrejsi metodu na prevod casu):

double i = 0;
DateTime start = DateTime.Now;
DateTime pauseStart = DateTime.Now;

private void btnStart_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
start += DateTime.Now - pauseStart;
label1.Text = "Čas: " + i + " s";
label2.Text = "Čas: " + ShowTime(DateTime.Now - start);
}

private void btnStop_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
pauseStart = DateTime.Now;
label1.Text = "Čas: " + i + " s";
label2.Text = "Čas: " + ShowTime(DateTime.Now - start);
}

private void btnSmazat_Click(object sender, EventArgs e)
{
i = 0;
start = pauseStart = DateTime.Now;
label1.Text = "Čas: " + i + " s";
label2.Text = "Čas: " + ShowTime(DateTime.Now - start);
}

private void timer1_Tick(object sender, EventArgs e)
{
i = i + 0.1;
label1.Text = "Čas: " + i + " s";
label2.Text = "Čas: " + ShowTime(DateTime.Now - start);
}

private string ShowTime(TimeSpan time)
{
StringBuilder sb = new StringBuilder(50);
if (time.Hours > 0) sb.Append(time.Hours).Append("h ");
if (time.Minutes > 0) sb.Append(time.Minutes).Append("m ");
sb.Append(time.Seconds).Append(".").Append(time.Milliseconds).Append("s");
return sb.ToString();
}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Díky, to tvoje funguje parádně a měl jsi pravdu, nechal jsem je běžet cca hodinu výsledek byl velmi odlišný. Moc díky, že jsi ukázal správnou cestu, dokonce i chápu, jak jsi to udělal, jenom nechápu dole ten převod, ale to nevadí. Na to přijdu také.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Mno ten prevod. mozny je, ze te zmatl ten StringBuilder. Dalo by se to zapsat i takto:
string s = string.Empty;
if (time.Hours > 0) s+= time.Hours + "h ";
if (time.Minutes > 0) s+= time.Minutes + "m ";
s+= time.Seconds + "." + time.Milliseconds + "s";
return s;

Je to jednoduche. Proste kdyz je cas delsi nez 0 hodin. Tak tam zapisu 1h.
Kdyz je delsi nez 1 minuta, tak tam zapisu 1m.
A pak tam nacpu cas v sekundach a milisekundach.
Jedinej rozdil je v tom ze ten StringBuilder pracuje mnohem rychleji nez tento zapis, ikdyz vysledek je stejny.

Takze pro dobu 1 hodina, 4 minuty, 3s to zapise: 1h 4m 3.0s
Jak ted na to koukam, tak v pripade 1h 0m 5s tam budou chybet ty minuty. tj zapis: 1h 5s. To nevim jestli je to prehledne, ale kdyz ne, tak staci rozsirit podminku (u tech minut a testovat i pocet hodin), aby to psalo 1h 0m 5s.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Stopky, Timer



Konec českého poskytovatele internetu v přímém přenosu. Připomíná to krachující energetické firmy
Lukáš Václavík
CETINPoskytovatelé internetuPřipojení k internetu
Google není jen vyhledávač: 15 užitečných funkcí, o kterých možná ani nevíte

Google není jen vyhledávač: 15 užitečných funkcí, o kterých možná ani nevíte

** Google umí kromě vyhledávání i spoustu dalších věcí ** Vybrali jsme více než 15 užitečných funkcí a schopností ** Stačí zadat do vyhledávače ta správná klíčová slova

Karel Kilián
TipyVyhledávačeGoogle
Za WhatsApp se bude platit! Za předplatné dostanete funkci, která je u konkurence zadarmo

Za WhatsApp se bude platit! Za předplatné dostanete funkci, která je u konkurence zadarmo

** Bylo to jen otázkou času ** Už i WhatsApp nabízí prémiové předplatné ** Za poplatek dostanete funkci, která je u konkurence zadarmo

Martin Chroust
předplatnéWhatsAppMobilní aplikace
Facebook má nejspíš vaše telefonní číslo, i když jste mu ho nikdy nedali. Tímto tajným nástrojem ho můžete smazat

Facebook má nejspíš vaše telefonní číslo, i když jste mu ho nikdy nedali. Tímto tajným nástrojem ho můžete smazat

**Meta poskytuje nástroj na vymazání telefonních čísel a e-mailových adres z Facebooku a Instagramu **V minulosti Mark Zuckebrg popřel, že by Facebook vytvářel stínové profily **Metě teď můžete sebrat klíčové iddentifikátory, pořád o vás ale nejspíš ví mnoho dalšího

Petr Urban
MetaSledováníSociální sítě
Máte rádi malé telefony? Pak si oblíbíte tohoto třípalcového drobečka, který není větší než platební karta

Máte rádi malé telefony? Pak si oblíbíte tohoto třípalcového drobečka, který není větší než platební karta

** Dnešní telefony se předhánějí v tom, který z nich bude větší ** Malé telefony na trhu skoro vyhynuly... ** Čínská značka si připravila telefon do dlaně s třípalcovým displejem

Martin Chroust
InfraportKompaktní velikostSmartphony
Vyzkoušeli jsme levnou autodiagnostiku s Androidem. Servisy ohrnou nos, řidičům bude stačit

Vyzkoušeli jsme levnou autodiagnostiku s Androidem. Servisy ohrnou nos, řidičům bude stačit

** Smartphone s Androidem dnes využijete i pro autodiagnostiku ** Jednotku OBD-II dnes pořídíte za pár stovek ** Co se vše dokáže diagnostika s bezplatným SW v češtině?

Martin Chroust
DiagnostikaPro řidiče
Elektromagnetické pušky jsou postrachem dronů ve válce. Vypadají jako ze sci-fi

Elektromagnetické pušky jsou postrachem dronů ve válce. Vypadají jako ze sci-fi

** Ukrajinské síly používají několik typů lehkých protidronových pušek ** Na fotografiích z bojů se nejčastěji vyskytují EDM4S a KVS G-56 ** Malý dron „sestřelí“ na vzdálenost až několika kilometrů

Jakub Čížek
UkrajinaZbraněUAVDrony
Tuto českou základnu plnou satelitů nesmíte vidět. V Mapy.cz je každá anténa pečlivě vyretušovaná

Tuto českou základnu plnou satelitů nesmíte vidět. V Mapy.cz je každá anténa pečlivě vyretušovaná

** Zapomeňte na rozčtverečkovaná místa, kterých si každý všimne ** Mapy.cz musely dokonale zakrýt desítky parabol ** Základnou se přitom na webu chlubí i její majitel. Kocourkov

Jakub Čížek
ČeskoMapy.czMapy
GeForce RTX 4080 v testech: překoná i to nejlepší z minulé generace

GeForce RTX 4080 v testech: překoná i to nejlepší z minulé generace

** Nvidia dostává na trh grafickou kartu GeForce RTX 4080 ** K dispozici jsou nezávislé testy z celého světa ** Karta nabízí hodně výkonu za zajímavou cenu

Karel Javůrek
GeForce RTX 4000Grafické kartyNvidia

Aktuální číslo časopisu Computer

Megatest mobilů do 4 000 Kč

Velký test herních notebooků

Jak zkrotit sociální sítě

Vše o senzorech v hodinkách