Začátečník

Pokročilý

Profesionál

Prostor pro experimentování

Programátorská laboratoř

 

Budete potřebovat přibližně 1 hodinu

Operační systém použitý v příspěvku: Windows 2000

Vývojové nástroje: Visual Basic .NET

 

 

 

Aktivace optimalizace kompilátora

Použití volitelných (optional) parametrů

Jak zjistit, zdali byla stisknuta klávesa Enter

Ukázka práce strukturované správy chyb

Tvorba kontextové nabídky klonováním

 

 

Aktivace optimalizace kompilátora

 

Pokud pracujete ve VB .NET, tento typ bude pro vás zcela jistě užitečný. Každý programátor se jednou dostane do situace, kdy zatouží po rychlejším provádění svého programové kódu. Jak možná víte, čas strávený pečlivým studiem kódu a promýšlením, jak zefektivnit tu či onu proceduru nebo funkci, bývá leckdy neúnosně dlouhý. Jestliže patříte do skupiny programátorů, kteří by pro optimalizaci kódu udělali takřka všechno, vyzkoušejte následující postup:

 

  1. Spusťte VB .NET a otevřete váš projekt.
  2. V okně Průzkumníka řešení (Solution Explorer) klepněte pravým tlačítkem myši na název vaší aplikace. Měla by se objevit kontextová nabídka. Z nabídky vyberte poslední položku Properties. Za okamžik se zobrazí okno Property Pages.
  3. Zaměřte svou pozornost na seznam, jenž se nachází v levé části dialogového okna. V seznamu klepněte na položku Configuration Properties. 
  4. Aktivovaná položka se „rozbalí“ a ukáže vám svůj obsah. V této chvíli klepněte na příkaz Optimizations.
  5. Zatrhněte pole Enable optimizations (obr. 1).

 

 

Obr. 1 – Zapnutí optimalizace kompilátora v okně Property Pages

 

  1. Aktivujte tlačítko OK.

 

Jakmile v budoucnu vydáte příkaz na sestavení aplikace .NET, kompilátor použije různá optimalizační nastavení. Při své práci se bude snažit, aby vygenerovaný výstup byl kapacitně méně náročný, rychlejší a efektivnější.

 

Protože kompilátor při své práci může v zásadní míře změnit strukturu programového kódu na úrovni jazyka MSIL, můžete mít po sestavení aplikace se zapnutou optimalizací kompilátoru problémy s pozdějším dalším odlaďováním této aplikace. Proto se doporučuje, abyste automatickou optimalizaci kompilátoru používali jenom pro plně odladěnou aplikaci, která je generována v režimu Release.

 

Ačkoliv se jedná o automatickou optimalizaci, je možné, že v některých případech dosáhnete navýšení výkonu vaší aplikace. Neměli byste ovšem očekávat, že zapnutí uvedené optimalizační volby zcela nahradí komplexní proces pečlivé kontroly a „manuální“ optimalizace programového kódu vaší aplikace.

 

Zpět na obsah

 

Použití volitelných (optional) parametrů 

 

Pod pojmem volitelný parametr se rozumí parametr v signatuře funkce nebo procedury Sub, který je uveden klíčovým slovem Optional. Pro volitelné parametry platí následující pravidla:

 

  1. Všem volitelným parametrům musejí být přiřazeny inicializační hodnoty.
  2. Inicializační hodnota musí mít konstantní povahu (např. hodnota volitelného parametru může být inicializována numerickou konstantou).
  3. Každý parametr, jenž následuje za volitelným parametrem musí být rovněž volitelný (není tedy přípustné míchat povinné a volitelné parametry v signatuře funkce či procedury).

 

Dobrá, tolik říká teorie a teď se podívejme, jak vypadá deklarace volitelných parametrů v praxi. Postupujte dle těchto instrukcí:

 

  1. Zapište do okna editoru pro zápis programového kódu kód funkce Propočet:

 

    Private Function Propočet _

    (ByVal cena As Single, _

    Optional ByVal množtví As Integer = 10) As Single

 

        MessageBox.Show((cena * množtví).ToString)

 End Function

 

Jde o soukromou funkci, která vypočítává cenu obstarání nějaké komodity. Funkce pracuje se dvěma parametry. Prvním parametrem je cena výrobku v podobě datového typu Single. Druhý parametr představuje nakoupené množství výrobků a jak si můžete všimnout, jde o volitelný parametr, kterého datový typ je Integer. Jak již víte, volitelný parametr musí být inicializován (zde na hodnotu deseti kusů výrobků). Výsledkem práce funkce je výpočet celkové ceny obstarání, která se posléze zobrazí v dialogovém okně. 

 

  1. Zkuste přidat na formulář tlačítko a do zpracovatele události Click tlačítka umístěte tento řádek kódu:

 

       Call Propočet(100.5)

 

V případě, že nezadáte množství výrobků, které jste nakoupili, použije se standardní množství (10 ks). Takto by vás celý nákup stál rovných 1005 korun. Jestliže budeme abstrahovat od obchodních záležitostí a budeme se soustředit jenom na programový kód, můžeme říct, že právě toto je hlavní úkol volitelného parametru. Když totiž není zadána hodnota druhého parametru, použije se předem stanovená hodnota, což ušetří trochu námahy při psaní signatury funkce. Pokud však chcete, můžete hodnotu druhého parametru změnit, třeba na 20:

 

 

       Call Propočet(100.5, 20)

 

Při zápisu hodnoty druhého parametru vám opět pomůže technologie IntelliSense a poví vám, že druhý parametr je volitelný a rovněž zobrazí i jeho konstantní hodnotu. Jenom připomenu, že volitelnost druhého parametru je v popisku indikována přítomností hranatých závorek (viz obrázek).

 

 

  1. I tentokrát se vypočte správná hodnota, kterou uvidíte v dialogovém okně.

 

Zpět na obsah

 

Jak zjistit, zdali byla stisknuta klávesa Enter

 

Zjistit, zdali byla aktivována klávesa Enter, lze poměrně jednoduše pomocí následujícího kódu:

 

    Private Sub TextBox1_KeyPress(ByVal sender As Object, _

    ByVal e As System.Windows.Forms.KeyPressEventArgs) _

    Handles TextBox1.KeyPress

 

        If e.KeyChar = Microsoft.VisualBasic.ChrW(13) Then

            MessageBox.Show("Byla aktivována klávesa ENTER.")

        End If

 

    End Sub

 

V uvedeném výpisu se předpokládá, že na formuláři se nachází textové pole s názvem TextBox1. A jak pracuje uvedený kód? Skutečnost, zdali byla požadovaná klávesa stisknuta či nikoliv, budeme testovat v obsluze události KeyPress textového pole. K události KeyPress dojde vždy, když uživatel stiskne klávesu, která disponuje příslušným ASCII kódem. Mezi takovéto klávesy patří alfabetické a numerické klávesy, podobně jako i některé jiné klávesy (jako je např. klávesa Enter). Aby bylo možno rozeznat, která klávesa byla stisknuta, můžeme testovat hodnotu vlastnosti KeyPressEventArgs.KeyChar. Na identifikaci klávesy Enter použijeme funkci ChrW. Této funkci jako parametr předáme ASCII kód klávesy Enter, který je reprezentován číselnou hodnotou 13. Vždy, když uživatel zapíše do textového pole několik znaků, testujeme, zdali ASCII kód zadaného znaku neodpovídá ASCII kódu klávesy Enter. Je-li tomu tak, zobrazí se dialogové okno se zprávou, která říká, že byla zmáčknuta hledaná klávesa.

 

Zpět na obsah

 

Ukázka práce strukturované správy chyb

 

VB .NET přichází s novinkami také v oblasti ošetřování chyb a odlaďování programů. Střetáváme se zde s tzv. strukturovanou správou chyb, podstatu které si ihned vysvětíme. Jestliže máte zkušenosti s VB 6.0, bude pro vás lepší, když budou představeny oba systémy správy chyb (tak ve VB 6.0, jako i ve VB .NET) a vy budete moci porovnat prezentované rozdílnosti.

 

Pokud jste chtěli ve VB 6.0 vložit do funkce nebo procedury chybovou rutinu, ve většině případů programový kód této chybové rutiny vypadal asi takto:

 

Private Sub btn1_Click()

On Error GoTo Napravit_chybu

 

Dim x As Integer, y As Integer

x = 1000

y = 0

 

Me.Caption = x \ y

 

Exit Sub

 

Napravit_chybu:

MsgBox "Tuto operaci nelze provést."

End Sub

 

V příkladě můžete pozorovat autorovu snahu o vyvolání chyby č. 11 s názvem Division by zero (Dělení nulou). Protože takováto operace je z matematického hlediska nepřípustná, vyskytne se chyba. Aby jsme mohli chybu tohoto typu ošetřit, vkládáme do programového kódu konstrukci On Error Goto Návěstí, kde Návěstí představuje tu sekci kódu, která se má provést v případě, že dojde v programu k chybě. Když se vrátíme k uvedenému kódu, uvidíme, že název Návěstí je Napravit_chybu. Můžeme tedy říci, že vždy, když dojde v této událostní proceduře k chybě, exekuce programu bude pokračovat prováděním kódu, jenž je umístěn pod názvem Návěstí (tedy pod řetězcem Napravit_chybu).

 

Pojďme se nyní podívat na to, jaká je situace v tomto směru ve VB .NET. Pro analogii použijeme již uvedenou podobu programového kódu (i když samozřejmě uzpůsobenou pro novou verzi jazyka) a budeme pozorovat rozdíly.

 

    Private Sub btn2_Click(ByVal sender As System.Object, _

    ByVal e As System.EventArgs) Handles btn2.Click

        Try

            Dim x, y As Integer

            x = 1000

            y = 0

 

            Me.Text = x \ y

        Catch

            MessageBox.Show("Tuto operaci nelze provést.")

        End Try

    End Sub

  

Zde máte možnost vidět ukázku práce moderní strukturované správy chyb. O co vlastně jde? Zjednodušeně lze prohlásit, že všechen kód, o kterém si myslíme, že by mohl způsobit jakoukoliv chybu, umístíme do bloku Try. V bloku Try dále vytvoříme jeden (nebo i několik) bloků Catch. Blok Catch obsahuje programový kód pro ošetření vzniklé chyby. Když tedy dojde k chybě, exekuce programu se přenese do bloku Catch a provede se ten kód, jenž se v daném bloku nachází (přesněji dojde k zobrazení chybového hlášení pomocí třídy MessageBox). Celou chybovou rutinu uzavírá příkaz End Try.

 

Jenom pro zajímavost připomenu, že i v prostředí jazyka VB .NET můžete používat starší (nestrukturovanou) správu chyb prostřednictvím konstrukce On Error Goto Návěstí. Přestože je tento způsob ošetřování chyb stále podporován, měli byste dát přednost nové koncepci psaní chybových rutin.

 

Zpět na obsah

 

Tvorba kontextové nabídky klonováním

  

Náplní poslední programové ukázky bude zhotovení kontextové nabídky klonováním jedné z nabídek hlavního menu programu. Přitom tak hlavní nabídku, jako i kontextuálně vázanou nabídku vytvoříme pomocí programového kódu. Podívejte se nejprve na samotný kód a pak si k němu řekneme pár slov.

 

        Dim hlavní_nabídka As New MainMenu()

        Dim nabídka1 As New MenuItem()

        nabídka1.Text = "Nabídka č.1"

        hlavní_nabídka.MenuItems.Add(nabídka1)

        nabídka1.MenuItems.Add("Položka č.1")

        Me.Menu = hlavní_nabídka

 

 

        Dim kontextová_nabídka As New ContextMenu()

        kontextová_nabídka.MenuItems.Add(nabídka1.CloneMenu())

 

        TextBox1.ContextMenu = kontextová_nabídka

 

V první řadě je potřebné vytvořit novou hlavní nabídku (hlavní_nabídka). Dále vytvoříme jednu parciální nabídku (nabídka1), kterou posléze přidáme do hlavní nabídky. Do právě vytvořené parciální nabídky přidáme pomocí metody Add jednu položku. Nakonec určíme, že hlavní nabídka se má stát právoplatnou nabídkou aktivní instance formuláře.

 

Naše další úsilí je spojené s tvorbou kontextuálně vázané nabídky (s názvem kontextová_nabídka). Právě v této chvíli se dostáváme k zlatému hřebíku představení, kterým je aplikace metody CloneMenu. Tato metoda vytváří přesnou kopii parciální nabídky nabídka1 (a všech součástí této nabídky). Kopie je následně přiřazena kontextové nabídce. Poslední řádek pak determinuje, že vytvořená kontextová nabídka se bude vztahovat na požadovanou instanci ovládacího prvku TextBox.

 

Pro praktické vyzkoušení práce programového kódu můžete na formulář umístit jednu instanci ovládacího prvku Button a rovněž jednu instanci ovládacího prvku TextBox. Událostní proceduru Click tlačítka vyplňte uvedeným kódem a spusťte testovací aplikaci. Klepněte nejdříve na tlačítko. Uvidíte, že se vytvoří hlavní nabídka, parciální nabídka a jedna položka této nabídky. Když klepněte pravým tlačítkem myši na instanci ovládacího prvku TextBox, objeví se kontextová nabídka, která vznikla klonováním (obr. 2).

 

 

Obr. 2 – Kontextová nabídka vytvořená klonováním

 

Zpět na obsah

 

 

Ján Hanák