2. diel - Jednoduchá kalkulačka v VB.NET Windows Forms
V minulom dieli seriálu, Úvod do Windows Forms aplikácií v VB.NET , sme si uviedli technológiu Windows Forms a vytvorili okno s textovým popisom.
V dnešnom dieli sa pozrieme na udalosti a vytvoríme jednoduchú kalkulačku. Bude vyzerať takto:
Príprava formulára
Založte si nový Windows Forms projekt s názvom Kalkulacka. Formulár premenujeme na KalkulackaForm. Pri aplikáciách sa väčšinou začína práve návrhom formulára. Z Toolbox na neho natiahneme niekoľko kontroliek. Budeme potrebovať:
- 2x Label
- 1x Button
- 2x NumericUpDown
- 1x ComboBox
Label
Label už poznáme, jedná sa jednoducho o textový popis.
Ak indikátory nepoužívame z kódu, nemusíme ich pomenovávať. Ak áno, mali by sme im nastaviť vlastnosť Name (v oknu Properties je názov vlastnosti v zátvorke (Name)) a cez toto meno ku kontrolke potom z kódu pristúpime. Odporúčam si prepnúť zobrazenie vlastností z kategórií, na abecedný (prvé 2 ikonky v Properties oknu), vlastnosti nájdete rýchlejšie. Name je teda meno objektu, Text je to, čo je na objekte napísané. Z toho logicky vyplýva, že na formulári môžeme mať viac kontroliek s rovnakým textom, ale len jednu s určitým menom.
Jeden label bude slúžiť len ako návestie s textom "=", nastavte mu ho. Druhý Label bude slúžiť pre výpis výsledku a keďže do neho budeme programovo vkladať hodnotu, nastavíme jeho vlastnosť Name na vysledekLabel. Text nastavíme na hodnotu "0". Font výsledku môžeme zväčšiť na veľkosť 10.
Button
Button je jednoducho tlačidlo, ktoré v prípade stisku zavolá nejakú metódu (presnejšie vyvolá udalosť). V našom prípade sa bude tlačidlo menovať vypocitejButton a jeho Text bude nastavený na "Vypočítaj". Udalosť tlačidlu priradíme neskôr.
NumericUpDown
NumericUpDown je prvý kontrolka na zadávanie hodnoty, ktorú si uvedieme. V predvolenom nastavení do nej môžeme zadať len celé číslo. Toto správanie možno zmeniť nastavením vlastnosti DecimalPlaces, ktorá udáva počet desatinných miest. Túto hodnotu nastavme na 2 oboma kontrolkám. Tiež nastavíme vlastnosti Minimum a Maximum, v našom prípade minimum na nejakú nízku hodnotu a maximum na nejakú vysokú, napr. -1000000 a 1000000. Ak by sme chceli využiť maximálne hodnoty daného dátového typu, musíme limity nastaviť v kóde formulára pomocou vlastnosti maxvalue a MINVALUE tak na danom dátovom typu.
Výhodou zadávanie čísel touto kontrolkou je, že užívateľ nemôže zadať nezmyselnú hodnotu. Ak by sme číslo parsovali z textbox (ktorý si ukážeme v ďalších dieloch), mohla by naše aplikácie pri nevalidním vstupe spadnúť. Je vždy jednoduchšie vybrať správnu kontrolku ako ošetrovať užívateľský vstup.
Kontrolky pomenujeme ako cislo1NumericUpDown a cislo2NumericUpDown. Všimnite si, že meno by malo vždy obsahovať aj typ kontrolky. Môžeme tak mať napr. VekLabel a vekNumericUpDown, kedy label je label pole na zadanie veku a numericUpDown je potom toto pole. Navyše sa v kóde potom lepšie orientuje. Niekedy sa používa aj cisloNmr, vypocitejBtn a podobne.
ComboBox
Sme skoro v cieli. ComboBox je Výjazdný zoznam s niekoľkými preddefinovanými prvkami. Prvky môžeme buď naklikať v návrhári alebo vložiť z kódu a to aj za behu programu. Toto platí pre všetky komponenty, všetky vlastnosti z návrhára môžeme nastavovať iz kódu. Niektoré pokročilé vlastnosti idú však nastaviť len z kódu a v návrhári nie sú.
Kontrolku pomenujeme operaceComboBox au vlastnosti Items klikneme na tlačidlo "...". Do novo otvoreného okna vypíšeme možnosti, ktoré v combobox pôjdu vybrať. Každú možnosť zapíšeme na samostatný riadok, v našom prípade to budú hodnoty "+", "-", "*", "/".
Pozn .: Položkami nemusí byť len textové reťazce, ale aj objekty. Ukážeme si to neskôr.
Vybranú položku možno bohužiaľ nastaviť len z kódu.
Nastavené kontrolky usporiadame na formulár tak, ako bolo uvedené na začiatku článku.
Kód formulára
Presunieme sa do zdrojového kódu formulára. Už vieme, že to urobíme skratkou CTRL + ALT + 0 alebo pravým tlačítkom myši na formulár a View Code.
Vytvorte si konštruktor, Visual Studio Vám do neho ihneď vloží volanie metódy InitializeComponent (), v konstruktoru nastavíme vybranú položku pre operaceComboBox. Urobíme to nastavením vlastnosti SelectedIndex na 0, teda prvú položku:
Public Sub New() InitializeComponent() operaceComboBox.SelectedIndex = 0 End Sub
Z formulára máme samozrejme prístup ku všetkým jeho kontrolkám.
Do konstruktoru vkladáme ten kód, ktorý sa má vykonať po vytvorení formulára, ale to je snáď jasné. Keď aplikáciu spustíte, bude vybrané sčítanie:
Obsluha udalostí
Zostáva nám teda už len reagovať na udalosť kliknutí tlačidla. Presunieme sa z kódu späť na formulár a na tlačidlo 2x klikneme. V kóde nám pribudla nová metóda:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click End Sub
Všimnite si kľúčového slova Handles, to určuje čo všetko metóda obsluhuje. Ak by mala metóda obsluhovať viac kontroliek, oddeľte ich čiarkou. napr:
Sub ZpracujData() Handles btnWork.Click, tmrAutoSave.Tick End Sub
Vráťme sa ešte do Designeri (klávesa Shift + F7) a označme tlačidlo. V oknu properties môžeme prepínať medzi Vlastnosťami a Udalosťami a to pomocou nižšie zvýraznených tlačidiel:
Vidíme tu našej udalosť Click, ktorú odtiaľto môžeme odstrániť a prípadne znovu pridať. Niektoré kontrolky majú špeciálne udalosti, pre ktoré vygenerujeme metódy práve odtiaľ.
Nikdy neodstraňujte udalosti tak, že vymažete obslužnú metódu z kódu, designer by prestal fungovať a museli by ste jeho súbor opraviť (konkrétne odstrániť priradenie neexistujúce metódy do udalosti). Správne je to jedine cez designer.
Výpočet
Prejdime k samotnému výpočtu. Kód nebude nijako zložitý, jednoducho v obslužnej metóde tlačidla naselectujeme vybrané položky operaceComboBoxu a podľa toho vypočítame výsledok. Ten potom nastavíme ako text vysledekLabel. Nemali by sme zabudnúť ošetriť delenie nulou.
Kód obslužné metódy by mohol vyzerať takto:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim cislo1 = cislo1NumericUpDown.Value Dim cislo2 = cislo2NumericUpDown.Value Dim vysledek As Double Select Case operaceComboBox.SelectedIndex Case 0 vysledek = cislo1 + cislo2 Case 1 vysledek = cislo1 - cislo2 Case 2 vysledek = cislo1 * cislo2 Case 3 If cislo2 = 0 Then MsgBox("Dělit nulou nelze") vysledek = 0 Exit Select End If vysledek = cislo1 / cislo2 End Select vysledekLabel.Text = vysledek End Sub
Najprv si uložíme hodnoty z kontroliek do premenných, je to tak prehľadnejšie. K vybranej položke ComboBox sa dostaneme cez SelectedIndex, ktorý je typu integer a udáva poradie vybrané položky. Rovnako tak by sme mohli pracovať aj s jednoduchým textom položky cez SelectedItem.
V prípade nulového deliteľa zobrazujeme užívateľovi MsgBox pomocou rovnomennej metódy. Nakoniec do vysledekLabel vypíšeme výsledok.
Formulári ešte môžeme nastaviť Ikonu cez vlastnosť Icon (vyberieme súbor s ikonkou), text nastavíme na "Kalkulačka" a StartPosition na CenterScreen. Formulár sa tak vytvorí uprostred obrazovky. Ak nastavíme FormBorderStyle na hodnotu FixedSingle, nepôjde formulár rozťahovať, čo sa pre našu aplikáciu hodí. Rovnako tak môžeme zakázať maximalizáciu okna pomocou vlastnosti MaximizeBox.
Kód je ako vždy v prílohe.
Nabudúce, PRIPOMIENKOVÉ narodenín v VB.NET - Návrh formulárov , si vytvoríme zložitejšie aplikáciu s viacerými formulármi, bude sa jednať o pripomínač narodenín.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 292x (136.48 kB)
Aplikácia je vrátane zdrojových kódov v jazyku VB