Převod sekund
| Website: | Moodle ZČU |
| Kurs: | KPV/TI Technická informatika ve strojírenství - šablona |
| Buch: | Převod sekund |
| Gedruckt von: | Nepřihlášený host |
| Datum: | Sonntag, 8. November 2026, 18:11 |
1. PrevodSekund
Úkolem je napsat program, který bude převádět celkový počet sekund na celé hodiny, minuty a sekundy.
Účel příkladu
- Celočíselné dělení beze zbytku
- Zbytek po celočíselném dělení
- Konverze textu na reálné číslo
- Konverze čísla na text
- Výpis textu v konzolové aplikaci
- Podmínka
- Zavření konzole
Typ aplikace
- Konzolová aplikace
Popis úkolu
- Vypočtení počtu hodin, minut a sekund ze zadaného celkového počtu sekund. Výpočet a výpis bude proveden v hlavní metodě
Funkčnosti
- Po načtení celkového počtu sekund se provede výpočet počtu hodin, minut a sekund ze zadaného celkového počtu sekund. Vypočtené hodnoty se vypíší v hlavní metodě
Výstup programu

Výstup programu: Ukázka výpisu v hlavní metodě programu PrevodSekund
1.1. Analýza a návrh řešení
Příklad je založen na celočíselném dělení a zbytku po celočíselném dělení. Například u celočíselného dělení hodnot 5 a 2, tedy 5 / 2 je výsledek 2. Číslo 2 se celé vejde do 5 celkem 2×. O co se nevejde celá hodnota 2 do hodnoty 5 napotřetí lze vyjádřit pomocí operace zbytek po celočíselném dělení, tedy 5 % 2. Výsledek této operace je 1. Následující vývojový diagram zachycuje podstatu algoritmu PrevodSekund, tj. výpočtu hodin, minut a sekund ze zadaného celkového počtu sekund - viz Obrázek 1.

Obrázek 1: Vývojový diagram algoritmu PrevodSekund
1.2. C# kód
Po založení projektu pro konzolovou aplikaci budeme v hlavní metodě Main jako první deklarovat celočíselné proměnné, do nichž budeme ukládat jak vypočtené hodnoty, tak i hodnotu načtenou od uživatele, která bude představovat celkový počet sekund. Celočíselnou proměnnou, do které uložíme celkový počet sekund, nazveme celkem. Z tohoto zadaného celého čísla následně vypočteme počet hodin, minut a sekund. Tyto hodnoty budou ukládány do celočíselných proměnných s názvy hodin, minut a sekund. V následujícím C# kódu vidíme deklaraci čtyř celočíselných proměnných - viz Kód 1.
/*Deklarace celočíselných proměnných: 'celkem'... celkový počet sekund, * 'hodin'... počet hodin, 'minut'... počet minut, * 'sekund'... počet sekund */ int celkem, hodin, minut, sekund;
Kód 1: Deklarace celočíselných proměnných
Dalším krokem v programu je načtení počtu sekund zadaných v okně konzolové aplikace. Uživatel by měl být nejprve vyzván k zadání počtu sekund. Uživatel hodnotu v konzoli zadává jako textový řetězec. Tento textový řetězec načteme pomocí příkazu Console.ReadLine(). Abychom mohli vypočítat počet hodin, minut a sekund, je zapotřebí tuto načtenou textovou hodnotu převést (konvertovat pomocí příkazu int.Parse() - provede čtení znaku po znaku a sestaví výslednou celočíselnou hodnot) na celočíselnou hodnotu a uložit ji do proměnné celkem - viz Kód 2.
//Výzva k zadání celkového počtu sekund Console.Write("Zadejte celkový počet sekund: "); //Načtení celkového počtu sekund(konverze načtených číslic na celé číslo) celkem = int.Parse(Console.ReadLine());
Kód 2: Výpis textu a načtení textu, včetně jeho konverze na celé číslo a uložení do proměnné
Pro výpočet hodin ze zadaného celkového počtu sekund použijeme operátor celočíselného dělení, tj. / (např. 5 / 2 = 2). Vypočtenou hodnotu následně přiřadíme (uložíme) do proměnné hodin, která reprezentuje počet hodin - viz Kód 3.
//Výpočet hodin(celočíselné dělení) ze zadaného celkového počtu sekund hodin = celkem / 3600;
Kód 3: Operátor celočíselného dělení pro výpočet hodin ze zadaného celkového počtu sekund
Abychom vypočetli zbytek celkového počtu sekund po odstranění počtu hodin, použijeme operátor pro zbytek po celočíselném dělení, tj. % (např. 5 % 2 = 1). Vypočtenou hodnotu přiřadíme do proměnné celkem, tj. přepíšeme hodnotu zadaného celkového počtu sekund novou vypočtenou hodnotou - viz Kód 4.
//Zbytek po celočíselném dělení (odebrání počtu hodin z celkového počtu sekund) celkem = celkem % 3600;
Kód 4: Operátor zbytku po celočíselném dělení pro výpočet zbytku sekund po odečtení počtu hodin z celkového počtu sekund
Obdobným způsobem budeme pokračovat při výpočtu minut, který přiřadíme vypočtenou hodnotu do proměnné minut - viz Kód 5.
//Výpočet minut (celočíselné dělení) ze zbytku po celočíselném dělení (po odebrání hodin) minut = celkem / 60;
Kód 5: Operátor celočíselného dělení pro výpočet minut počtu sekund po odstranění hodin
Vzhledem k tomu, že jsme již z celkového počtu sekund odstranili počet hodin pomocí operátoru celočíselného dělení, další odstraněním počtu minut rovněž pomocí tohoto operátoru získáme zbytkový počet sekund - viz Kód 6.
/* Výpočet počtu sekund - zbytek po celočíselném dělení (po odebrání počtu hodin * a minut vyjadřuje zbytek po celočíselném dělení zbývající počet sekund) */ sekund = celkem % 60;
Kód 6: Operátor zbytku po celočíselném dělení pro výpočet sekund po odebrání počtu hodin a minut
Potřebné hodnoty počtu hodin, minut a sekund již máme vypočteny, ale je také zapotřebí tento výsledek zobrazit uživateli, protože tyto hodnoty jsou uloženy v proměnných v paměti. Pro výpis vypočtených hodnot použijeme příkaz Console.WriteLine(). V kulatých závorkách jako argument této metody předáme text, který chceme vypsat. Tento text bude obsahovat index proměnné uzavřený ve složených závorkách (index první proměnné má hodnotu 0), abychom zajistili výpis hodnoty uložené v proměnné. Za textový řetězec umístíme čárku a za ní napíšeme název proměnné, jejíž aktuální hodnotu chceme vypsat - viz Kód 7.
//Výpis počtu hodin, tj. textu a vypočtené hodnoty Console.WriteLine("Hodin: {0}", hodin);
Kód 7: Výpis textu a obsahu proměnné
Stejným způsobem postupujeme u výpisu počtu minut a sekund. Na konci nesmíme zapomenout na příkaz čtení znaku, nebo funkční klávesy, abychom si mohli přečíst výpisy v konzoli (bez tohoto příkazu bude program ukončen) - viz Kód 8.
Console.WriteLine("Minut: {0}", minut); //Výpis počtu sekund Console.WriteLine("Sekund: {0}", sekund); //Čekání na stisk klávesy -> ukončení programu Console.ReadKey();
Kód 8: Výpis textu, obsahu zbývajících proměnných a čekání na stisk klávesy
1.3. Výsledný kód
Následující zdrojový kód v C# pro konzolovou aplikaci je transformací algoritmu PrevodSekund - viz Kód 1. Tento kód je umístěn v souboru Program.cs.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PrevodSekund { class Program { static void Main(string[] args) { /*Deklarace celočíselných proměnných: 'celkem'... celkový počet sekund, * 'hodin'... počet hodin, 'minut'... počet minut, * 'sekund'... počet sekund */ int celkem, hodin, minut, sekund; //Výzva k zadání celkového počtu sekund Console.Write("Zadejte celkový počet sekund: "); //Načtení celkového počtu sekund(konverze načtených číslic na celé číslo) celkem = int.Parse(Console.ReadLine()); //Výpočet hodin(celočíselné dělení) ze zadaného celkového počtu sekund hodin = celkem / 3600; //Zbytek po celočíselném dělení (odebrání počtu hodin z celkového počtu sekund) celkem = celkem % 3600; //zbytek po celociselnem deleni //Výpočet minut (celočíselné dělení) ze zbytku po celočíselném dělení (po odebrání hodin) minut = celkem / 60; /* Výpočet počtu sekund - zbytek po celočíselném dělení (po odebrání počtu hodin * a minut vyjadřuje zbytek po celočíselném dělení zbývající počet sekund) */ sekund = celkem % 60; //Výpis počtu hodin, tj. textu a vypočtené hodnoty Console.WriteLine("Hodin: {0}", hodin); //Výpis počtu minut Console.WriteLine("Minut: {0}", minut); //Výpis počtu sekund Console.WriteLine("Sekund: {0}", sekund); //Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); } } }
Kód 1: Program PrevodSekund - deklarace hlavní statické metody Main
Výstup programu
Na následujícím výstupu programu vidíme výpis vypočtených hodin, minut a sekund ze zadaného celkového počtu sekund - viz Výstup programu - Kód 1. Po provedení výpisu konzolová aplikace čeká na stisk klávesy, aby se po stisku mohla následně ukončit.
Výstup programu - Kód 1: Ukázka výpisu hodnot v hlavní metodě programu PrevodSekund
2. PrevodSekundWPF
Úkolem je napsat program, který by převáděl sekundy na celé hodiny, minuty a sekundy.
Účel příkladu
- Celočíselné dělení beze zbytku
- Zbytek po celočíselném dělení
- Konverze textu na reálné číslo
- Konverze čísla na text
- Výpis textu do pole na formuláři
- Podmínka
- Zavření formuláře
Typ aplikace
- WPF aplikace
Popis úkolu
- Vypočtení počtu hodin, minut a sekund ze zadaného celkového počtu sekund
Funkčnosti
- Při stisku tlačítka Převod (objektu typu Button) se provede výpočet počtu hodin, minut a sekund ze zadaného celkového počtu sekund a vypočtené hodnoty se vypíší se do jednotlivých polí (objekt typuTextBox) na formuláři umístěných pod sebe (do objektu typu StackPanel). Pokud bude zadán uživatelem špatný celkový počet sekund (např. písmena), uživatel bude přesměrován zpět do pole pro zadání počtu sekund (objekt typuTextBox)
- Při stisku tlačítka Konec se provede zavření formuláře
Výstup programu

Výstup programu: Ukázka převodu sekund pomocí programu PrevodSekundWPF

2.1. Analýza a návrh řešení
V podstatě se jedná o stejnou ideu původního příkladu PrevodSekund pro konzolovou aplikaci, ve které jsme požadovali, aby se na obrazovku v konzoli vypsal počet hodin, minut a sekund, které byly vypočteny ze zadaného celkového počtu sekund. Za tímto účelem využijeme modernější zobrazovací technologii WPF (Windows Presentation Foundation), ve které vytvoříme prezentační vrstvu. Pro formulář využijeme jak kód v XAML, tak i Code Behind.
Zadání celkového počtu sekund bude uživatel realizovat pomocí objektu typu TextBox, který umožňuje jak čtení tak i výpis - viz Obrázek 1. Dříve jsme používali pro výpis textu objekt typu Label. V tomto typu objektu lze pouze vypisovat, proto objekty typu Label použijeme pro nadpisy u jednotlivých vypočtených hodnot u hodin, minut a sekund. Label bude také umístěn nad objektem typu TextBox sloužícímu pro zadání celkového počtu sekund.
Jednotlivé výpočty bude prováděny pomocí zdrojového kódu v C# umístěného v Code Behind. Tyto kódy budou prováděny při události stisknutí tlačítka Převod (objektu typu Button). Při stisknutí tlačítka Konec se WPF aplikace zavře.
Obrázek 1: Návrh GUI pro aplikaci PrevodSekundWPF
Pro určení pozice jednotlivých vkládaných prvků využijeme rozdělení objektu Grid na jednotlivé sloupce a řádky. Díky tomuto rozdělení budeme moci definovat pozici, do kterého řádku a sloupce (dá se říci buňky tabulky - Grid) daný vložený objekt patří. Jednotlivé objekty (např. popisek - typ Label a pole pro vložení hodnot - typ TextBox) budeme dále vkládat do objektu typu StackPanel, který nám zajistí, že prvky budou vloženy např. pod sebou (lze změnit rozložení prvků i horizontálně). Následující obrázek ukazuje rozmístění jednotlivých objektů v mřížce formuláře - viz Obrázek 2.
Obrázek 2: Návrh GUI - rozložení prvků v mřížce formuláře
Formulář bude obsahovat následující objekty (kontrolky), které budou vnořeny následujícím způsobem:
- Grid
- StackPanel
- Label
- TextBox: TxtCelkem
- StackPanel
- Label
- TextBox: TxtHodin
- Label
- TextBox: TxtMinut
- Label
- TextBox: TxtSekund
- Button: BtnPrevod
- Button: BtnKonec
Na následujícím obrázku je vidět GUI při počátečním spuštění programu - viz Obrázek 3.
Obrázek 3: GUI při počátečním spuštění programu
2.2. XAML
Po založení projektu s názvem PrevodSekundWPF můžeme využít nabídky šablon posledních vytvořených projektů, které jsou v okně tvorby nového projektu umístěny vlevo. Vybereme si položku pro tvorbu WPF aplikace pro prostředí .NET Framework . Pokud víme, že projektu tohoto typu budeme nadále využívat, je výhodné si nabídku zafixovat pomocí připínáčku zobrazeného vpravo u položky - viz Obrázek 1. Tím zajistíme, že při další tvorbě nového projektu bude tato nabídka k dispozici.
Obrázek 1: VS - okno pro tvorbu nového projektu - nabídka šablon posledních vytvořených projektů
Dále postupujeme stejným způsobem jako u předchozího příkladu - viz Obrázek 2.
Obrázek 2: VS - konfigurace nového projektu
Po vygenerování formuláře jako první změníme jeho atributy - titulek formuláře (vlastnost Title), jeho výška (Height) a šířka (Width) - viz Kód 1.
<Window x:Class="PrevodSekundWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:PrevodSekundWPF" mc:Ignorable="d" Title="Převod" Height="350" Width="500"> <Grid> </Grid> </Window>
Kód 1: Změna atributů formuláře
Následující kód umístíme do XAML kódu pro mřížku (objekt typu Grid), která řeší rozložení okna. Vytvoříme v ní dva sloupce pomocí vlastnosti ColumnDefinition, kterou vyvoláme pomocí tečkové notace - viz Kód 2.
<Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions>
Kód 2: Tvorba sloupců v prvku Grid
Oba sloupce budou ve stejném šířkovém poměru , tj. přiřadíme vlastnosti šířky hodnotu vyjádřenou pomocí * - viz Obrázek 3.
Obrázek 3: Sloupce v prvku Grid
Dalším nezbytným krokem je definování výšky řádků. První a třetí řádek budeme řešit poměrově a druhý a čtvrtý řádek necháme přizpůsobit jeho obsahu (hodnota Auto), tj. přizpůsobení podle velikosti vkládaného prvku - viz Kód 3. Jak vidíte, nezáleží na tom, že jako první v Gridu definujeme sloupce a po té řádky.
<Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions>
Kód 3: Tvorba řádků v prvku Grid
V našem vytvářeném XAML kódu pro tvorbu formuláře budeme nyní využívat různé typy ovládacích prvků jakými jsou Label, TextBox, Button. Tyto prvky umístíme do prvku typu StackPanel. Ten nám zajistí, že vkládané prvky budou umístěny pod sebou. U prvku StackPanel nastavíme vnější okraje okolo tohoto prvku na 20 po každé straně a umístíme jej do prvního sloupce a druhé řádky prvku Grid (pokud definici vlastnosti indexu sloupce, nebo řádku vynecháme, umístí se prvek do počátečního řádku, nebo do počátečního sloupce). První StackPanel použijeme pro umístění prvku typu Label s názvem pole pro zadávání celkového počtu sekund, jehož písmo bude tučné s velikostí 14. Počet sekund, který uživatel bude zadávat do prvku typu TextBox, bude umístěn pod vloženým prvkem typu Label - viz Kód 4. U prvku typu TextBox využijeme následující vlastnosti:
- Name - název prvku
- ToolTip - nápověda, která zobrazí při umístění kurzoru myši nad prvek ve spuštěné aplikaci
<StackPanel Grid.Row="1" Grid.Column="0" Margin="20,20"> <Label Content="Celkem sekund:" FontWeight="Bold" FontSize="14"/> <TextBox Name="TxtCelkem" ToolTip="Zadejte celkový počet sekund" /> </StackPanel>
Kód 4: StackPanel - umístění prvků typu Label a TextBox pod sebe dovnitř StackPanel
Na následujícím obrázku vidíme rozložení prvků ve StackPanel umístěném v prvním sloupci a druhém řádku prvku Grid - viz Obrázek 4.
Obrázek 4: StackPanel obsahující prvky Label a TextBox
Další prvek typu StackPanel umístíme taktéž do druhého řádku, nyní však do pravého sloupce prvku Grid. Do prvku typu StackPanel umístíme prvek typu Label, který bude sloužit jako popisek prvku typu TextBox, který bude vypisovat počet hodin vypočítaný ze zadaného celkového počtu sekund. Tento TextBox již nebude sloužit pro zadávání čísel, ale pouze pro výpis, proto pozadí tohoto prvku podbarvíme (vlastnost Background) a nastavíme vlastnost IsReadOnly (prvek je určen pouze pro čtení) na hodnotu True (tzn. uživatel nemá možnost zadat hodnotu do prvku např. pomocí klávesnice) - viz Kód 5.
<StackPanel Grid.Row="1" Grid.Column="1" Margin="20,20"> <Label Content="Hodin:" FontWeight="Bold" FontSize="14"/> <TextBox Name="TxtHodin" Background="AliceBlue" IsReadOnly="True" /> </StackPanel>
Kód 5: StackPanel - umístění prvků typu Label a TextBox (určeného pouze pro čtení) pod sebe
Do StackPanel následně vložíme další prvky pro výpis vypočtených hodnot minut a sekund. Tyto prvky umístíme pod již vložené prvky stejným způsobem jako v předchozím XAML kódu - viz Kód 6. Upozorněme ještě na nastavení vnějších okrajů okolo prvku typu Label, tj. vlastnosti Margin. První hodnotou určujeme velikost vnějšího levého okraje prvku, za čárkou určíme velikost horního vnějšího okraje, za další čárkou velikost pravého vnějšího okraje a za poslední čárkou velikost dolního vnějšího okraje.
<Label Content="Minut:" FontWeight="Bold" FontSize="14" Margin="0,10,0,0"/> <TextBox Name="TxtMinut" Background="AliceBlue" IsReadOnly="True" /> <Label Content="Sekund:" FontWeight="Bold" FontSize="14" Margin="0,10,0,0"/> <TextBox Name="TxtSekund" Background="AliceBlue" IsReadOnly="True" />
Kód 4: Prvky typu Label a TextBox pro výpis hodnot minut a sekund
Na následujícím obrázku vidíme rozložení prvků ve StackPanel umístěném ve druhém sloupci a druhém řádku prvku Grid - viz Obrázek 5.
Obrázek 5: StackPanel ve druhém sloupci prvku Grid obsahující prvky Label a TextBox
Jako poslední musíme vložit do posledního řádku dvě tlačítka. První pro výpočet hodin, minut a sekund ze zadaného celkového počtu sekund a další pro ukončení aplikace - viz Kód 5. K oběma tlačítkům připojíme metody pro obsluhy události Click, kterou budeme později definovat v CodeBehind v následující kapitole.
<Button Name="BtnPrevod" Content="Převod" Grid.Row="3" Grid.Column="0" Margin="5,10" Width="100" VerticalAlignment="Center" Click="BtnPrevod_Click"/> <Button Name="BtnKonec" Content="Konec" Grid.Row="3" Grid.Column="1" Margin="5,10" Width="100" VerticalAlignment="Center" Click="BtnKonec_Click"/>
Kód 5: Button - tlačítka pro převod zadaného počtu sekund a ukončení aplikace
Výsledný formulář
Navržené rozložení prvků na formuláři, včetně formuláře samotného, je vidět na následujícím obrázku - viz Obrázek 6.
Obrázek 6: Výsledný formulář WPF aplikace
Objekty na formuláři
Formulář obsahuje následující objekty (kontrolky):
- Grid
- StackPanel
- Label
- TextBox
- TxtCelkem
- TxtHodin
- TxtMinut
- TxtSekund
- Button
- BtnPrevod
- BtnKonec
které jsou umístěny následujícím způsobem - viz Obrázek 7:
Obrázek 7: VS - okno Document Outline - seznam objektů
2.3. XAML - prvky formuláře
Nastavení formuláře
Následující XAML kód obsahuje nastavení formuláře - viz Kód 1. Pokud je zapotřebí zkopírujte XAML kód a vložte jej namísto řádky s nastavením vlastností okna (řádek začíná Title=....).
Title="Převod" Height="350" Width="500">
Kód 1: Nastavení vlastností formuláře
Grid
Následující zdrojový kód XAML obsahuje potřebné prvky na formuláři pro řešení úlohy, bez nastavení událostí - viz Kód 2. Pokud je zapotřebí, zkopírujte XAML kód a vložte jej mezi počáteční a koncovou značku prvku Grid.<Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <StackPanel Grid.Row="1" Grid.Column="0" Margin="20,20"> <Label Content="Celkem sekund:" FontWeight="Bold" FontSize="14"/> <TextBox Name="TxtCelkem" ToolTip="Zadejte celkový počet sekund" /> </StackPanel> <StackPanel Grid.Row="1" Grid.Column="1" Margin="20,20"> <Label Content="Hodin:" FontWeight="Bold" FontSize="14"/> <TextBox Name="TxtHodin" Background="AliceBlue" IsReadOnly="True" /> <Label Content="Minut:" FontWeight="Bold" FontSize="14" Margin="0,10,0,0"/> <TextBox Name="TxtMinut" Background="AliceBlue" IsReadOnly="True" /> <Label Content="Sekund:" FontWeight="Bold" FontSize="14" Margin="0,10,0,0"/> <TextBox Name="TxtSekund" Background="AliceBlue" IsReadOnly="True" /> </StackPanel> <Button Name="BtnPrevod" Content="Převod" Grid.Row="3" Grid.Column="0" Margin="5,10" Width="100" VerticalAlignment="Center" /> <Button Name="BtnKonec" Content="Konec" Grid.Row="3" Grid.Column="1" Margin="5,10" Width="100" VerticalAlignment="Center" />
Kód 2: Prvky v Grid
2.4. C#
V kódu XAML jsme definováním události a připojením handlerů (obsluhy) události Click pro stisk tlačítek u kontrolek typu Button, tj. BtnPrevod a BtnKonec vygenerovali v částečné veřejné třídě MainWindow dvě soukromé metody bez návratu BtnPrevod_Click a BtnKonec_Click - viz Kód 1.
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void BtnPrevod_Click(object sender, RoutedEventArgs e) { } private void BtnKonec_Click(object sender, RoutedEventArgs e) { } }
Kód 1: Code Behind - obsluha události stisknutí tlačítek
Do těla metody BtnPrevod_Click budeme vkládat zdrojový kód v C# pro převod zadaného celkového počtu sekund. Prvním krokem musí být deklarace celočíselných proměnných, které budeme v těle metody využívat - viz Kód 2.
//deklarace celočíselných proměnných int celkem, hodin, minut, sekund;
Kód 2: Deklarace celočíselných proměnných pro metody BtnPrevod_Click
Pro naplnění celočíselné proměnné celkem, která bude obsahovat celkový počet zadaných sekund, využijeme metodu TryParse() pro převod načteného textu do celého čísla. Metoda je implementována v datovém typu (ve třídě) celého čísla int. Tato metoda s výstupním parametrem celkem využívá klíčové slovo out, které je umístěno před název výstupního parametru (pozor na podmínku, že parametr musí být v dané metodě inicializován - naplněn). Celkovým výstupem této metody je informace, zda došlo ke konverzi, či nikoliv (datový typ bool). Proto tuto informaci využijeme v příkazu pro rozhodování if, kde do podmínky umístíme dotyčnou konverzi. Pokud tato konverze proběhne, umožníme provádění dalšího kódu, kde bude provedeno celočíselné dělení pro určení počtu hodin a zbytku po celočíselném dělení, abychom mohli postupně vypočítat počty minut a sekund. Postup je stejný jako v případě konzolové aplikace pro převod sekund, která byla popsána v předchozí kapitole. Pokud nedojde ke konverzi, tzn. bude provedena větev else, přepneme (zacílíme objekt) uživatele na formuláři do objektu TxtCelkem pomocí metody Focus() - viz Kód 3.
//pokud proběhne konverze textu na celé číslo potom... if (int.TryParse(TxtCelkem.Text, out celkem)) { //celočíselné dělení hodin = celkem / 3600; //zbytek po celočíselném dělení celkem = celkem % 3600; minut = celkem / 60; sekund = celkem % 60; } //jinak... else { TxtCelkem.Focus(); }
Kód 3: Metoda BtnPrevod_Click- testování konverze textu na celé číslo
Jako další musíme zajistit vypsání vypočtených hodnot na formulář do příslušných objektů. Zaměřme se nyní na výpis hodnoty do objektu TxtHodin typu TextBlock. Z minulého příkladu WPF aplikace HelloWPF2 víme, že abychom se dostali k objektu na formuláři, stačí nám využít klíčové slovo this. Pro přiřazení vypisovaného textu, využijeme vlastnosti Text. Záměrně mluvím o textu, ale my víme, že potřebujeme vypsat hodnotu. Potřebujeme tedy provést konverzi celého čísla na text. Využijeme implementované metody ToString(), kterou vyvoláme pomocí tečkové notace u celočíselné proměnné - viz Kód 4.
//převod vypočtené hodnoty na číslice a výpis v objektu na formuláři this.TxtHodin.Text = hodin.ToString();
Kód 4: Metoda BtnPrevod_Click- převod vypočtených hodin převedených na číslice (text) a výpis do objektu TxtHodin
Stejným způsobem budeme pokračovat u výpisu minut sekund na formulář - viz Kód 5.
this.TxtMinut.Text = minut.ToString(); this.TxtSekund.Text = sekund.ToString();
Kód 5: Metoda BtnPrevod_Click- převod vypočtených minut a sekund převedených na číslice (text) a výpis do příslušných objektů na formuláři
Jako poslední naplníme tělo metody BtnKonec_Click, pomocí níž zavřeme otevřený formulář (okno) - viz Kód 6.
private void BtnKonec_Click(object sender, RoutedEventArgs e) { //zavření formuláře this.Close(); }
Kód 6: Metoda BtnKonec_Click - zavření formuláře
2.5. Výsledný kód
XAML kód
Výsledný XAML kód formuláře (MainWindow.xaml) - viz Kód 1.
<Window x:Class="PrevodSekundWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:PrevodSekundWPF" mc:Ignorable="d" Title="Převod" Height="350" Width="500"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <StackPanel Grid.Row="1" Grid.Column="0" Margin="20,20"> <Label Content="Celkem sekund:" FontWeight="Bold" FontSize="14"/> <TextBox Name="TxtCelkem" ToolTip="Zadejte celkový počet sekund" /> </StackPanel> <StackPanel Grid.Row="1" Grid.Column="1" Margin="20,20"> <Label Content="Hodin:" FontWeight="Bold" FontSize="14"/> <TextBox Name="TxtHodin" Background="AliceBlue" IsReadOnly="True" /> <Label Content="Minut:" FontWeight="Bold" FontSize="14" Margin="0,10,0,0"/> <TextBox Name="TxtMinut" Background="AliceBlue" IsReadOnly="True" /> <Label Content="Sekund:" FontWeight="Bold" FontSize="14" Margin="0,10,0,0"/> <TextBox Name="TxtSekund" Background="AliceBlue" IsReadOnly="True" /> </StackPanel> <Button Name="BtnPrevod" Content="Převod" Grid.Row="3" Grid.Column="0" Margin="5,10" Width="100" VerticalAlignment="Center" Click="BtnPrevod_Click"/> <Button Name="BtnKonec" Content="Konec" Grid.Row="3" Grid.Column="1" Margin="5,10" Width="100" VerticalAlignment="Center" Click="BtnKonec_Click"/> </Grid> </Window>
Kód 1: Výsledný XAML kód vytvořeného formuláře
C# kód
Code Behind - C# kód pro veškeré události vyvolané uživatelem při manipulaci s aplikací (MainWindow.xaml.cs) - viz Kód 2.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace PrevodSekundWPF { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void BtnPrevod_Click(object sender, RoutedEventArgs e) { //deklarace celočíselných proměnných int celkem, hodin, minut, sekund; //pokud proběhne konverze textu na celé číslo potom... if (int.TryParse(TxtCelkem.Text, out celkem)) { //celočíselné dělení hodin = celkem / 3600; //zbytek po celočíselném dělení celkem = celkem % 3600; minut = celkem / 60; sekund = celkem % 60; //převod vypočtené hodnoty na číslice a výpis v objektu na formuláři this.TxtHodin.Text = hodin.ToString(); this.TxtMinut.Text = minut.ToString(); this.TxtSekund.Text = sekund.ToString(); } //jinak... else { TxtCelkem.Focus(); } } private void BtnKonec_Click(object sender, RoutedEventArgs e) { //zavření formuláře this.Close(); } } }
Kód 2: Výsledný C# kód vytvořeného formuláře a metod jeho prvků
Výstup programu
Na následujícím obrázku vidíme výstup naší aplikace pro převod celkového počtu sekund na hodiny, minuty a sekundy s použitím prvků WPF - viz Výstup programu - Kód 1 a 2. Převod je spuštěn pomocí tlačítka Převod. Aplikaci lze ukončit pomocí tlačítka Konec, nebo pomocí zavíracího tlačítka umístěného v pravém rohu aplikace.
Výstup programu - Kód 1 a 2: Výpis vypočtených hodin, minut a sekund ze zadaného celkového počtu sekund