Integrované prostředí rubriky Visual Basic

Autor: Ján Hanák

Programátorská laboratoř

Prostor pro experimentování

Časová náročnost

(min):

60

Začátečník

Pokročilý

Profesionál

Použitý operační systém : Hlavní vývojový nástroj :

Další vývojový software :

Jiný software :

Windows 2000 SP4

Visual Basic .NET 2003

Žádný

Žádný

 

 

 

Generování chybových výjimek

Vytváření formulářů libovolných tvarů

Ovládací prvek ProgressBar

 

 

Generování chybových výjimek

 

Při programování se záhy střetnete s chybovými výjimkami. Ve většině případů se programátoři snaží vzniklé výjimky „zachytávat“ prostřednictvím moderní strukturované, nebo již postarší nestrukturované správy chyb. V jistých případech však nastává potřeba pro generování vlastních chybových výjimek. Chybovou výjimku lze ve Visual Basicu .NET 2003 generovat pomocí příkazu Throw. V následující programové ukázce si předvedeme, jak z událostní procedury Click instance ovládacího prvku Button vygenerovat chybovou výjimku. Postupujte podle uvedených instrukcí:

 

  1. Spusťte Visual Basic .NET 2003 a vytvořte standardní aplikaci pro Windows (Windows Application).
  2. Na formulář přidejte instanci ovládacího prvku Button, přičemž ji nechte implicitně pojmenovanou.
  3. Na přidanou instanci poklepejte, čímž vytvoříte zpracovatele události Click dané instance.
  4. Podobu zpracovatele události Button1_Click upravte takto:

 

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

    ByVal e As System.EventArgs) Handles Button1.Click

        'Použití příkazu Throw pro vytvoření nové

        'instance třídy Exception

        Throw New Exception("Byla vygenerována chybová výjimka.")

    End Sub

 

Jak si můžete všimnout, za příkazem Throw následuje klíčové slovo New a název třídy Exception. Je tedy hned na první pohled jasné, že tento kompletní příkaz vytváří novou instanci třídy Exception. Konstruktor třídy je přetížený, v našem případě je použita ta verze konstruktoru, která pracuje s jedním parametrem typu String, do něhož je uložen textový řetězec, jenž reprezentuje zprávu, která se objeví v dialogovém okně s oznamem o chybě. 

 

  1. Spusťte aplikaci (klávesa F5) a klepněte na tlačítko na formuláři. Jakmile bude proveden zdrojový kód, který se nachází uvnitř zpracovatele události Click tlačítka, bude vygenerována chybová výjimka. Jelikož zpracovatel události Button1_Click nedisponuje žádným mechanizmem pro zachycení a ošetření vzniklých chybových výjimek, bude tato výjimka zachycena až samotným Visual Basicem .NET, který zobrazí následující dialog se zprávou o chybě (obr. 1):

 

 

Obr. 1 – Dialogové okno s chybovým hlášením

 

 

Chybu, kterou jsme vygenerovali, můžeme ošetřit v samotném zpracovateli události Click tlačítka, a to pomocí:

 

1.      Nestrukturované správy chyb

 

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

    ByVal e As System.EventArgs) Handles Button1.Click

 

        'Ukázka nestrukturované správy chyb pomocí příkazu On Error.

        On Error GoTo Zpracovatel_Chyb

        'Použití příkazu Throw pro vytvoření nové

        'instance třídy Exception

        Throw New Exception("Byla vygenerována chybová výjimka.")

 

        'Příkaz Exit Sub ukončuje exekuci zpracovatele

        'události Click tlačítka Button1 a používá se tehdy, kdy není

        've zpracovateli události generována žádná chybová výjimka

        '(jednoduše proto, aby nebyl proveden kód zpracovatele chyb).

        'V našem případě není použití tohoto příkazu nutné, protože

        'v proceduře Button1_Click dojde ke generování chybové výjimky vždy.

        Exit Sub

 

        'Definice zpracovatele chybové výjimky.

Zpracovatel_Chyb:

        'Zobrazení zprávy.

        MessageBox.Show("V proceduře došlo k chybě, ovšem tato " _

        & "byla úspěšně ošetřena.", "Hlášení programu", _

        MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Sub

 

Výsledek práce nestrukturované správy chyb můžete vidět na obr. 2.

 

 

Obr. 2 – Ukázka nestrukturované správy chyb

 

2.      Strukturované správy chyb

 

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

    ByVal e As System.EventArgs) Handles Button1.Click

 

        'Ukázka strukturované správy chyb pomocí konstrukce try-catch.

        Try

            'Použití příkazu Throw pro vytvoření nové

            'instance třídy Exception

            Throw New Exception("Byla vygenerována chybová výjimka.")

        Catch Chyba As Exception

            MessageBox.Show("V proceduře došlo k chybě, ovšem tato " _

            & "byla úspěšně ošetřena.", "Hlášení programu", _

            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

 

Je samozřejmé, že výsledek práce strukturované správy chyb je podobný tomu, ke kterému jsme dospěli použitím nestrukturované správy chyb.

 

Zpět na obsah

 

Vytváření formulářů libovolných tvarů

 

Pokud pracujete ve Visual Basicu .NET 2003 a chtěli byste zcela přepracovat vzhled formulářů svých aplikací, jste na správném místě. Jak jistě víte, standardní podoba dialogových oken, s nimiž běžně pracujete, je sice dostačující, ovšem o nějakém výjimečném designu a barevné atraktivnosti nemůže být ani řeči. Visual Basic .NET 2003 vám nabízí relativně snadný způsob, jak vytvořit neotřelé formuláře, aniž byste museli sahat po těžkých programovacích aparátech a API funkcích. Ve skutečnosti probíhá vytváření formuláře se specifickým tvarem podle následujícího algoritmu:

 

  1. Prvním krokem je příprava bitové mapy, která bude představovat nový tvar formuláře. Tuto bitovú mapu můžete vytvořit v některém z grafických editorů. Bitová mapa musí obsahovat kýžený tvar formuláře, jenž se rozprostírá na určitém pozadí. Přitom je důležité mít na paměti skutečnost, že barva tvaru formuláře musí být jiná než barva pozadí bitmapy. Obecně se doporučuje, aby měly obě entity (tvar formuláře a pozadí) snadno „zapamatovatelné“ barvy, jako například bílou a červenou. Ukázková bitová mapa může mít třeba následující podobu (obr. 3):

 

 

Obr. 3 – Potenciální podoba bitmapy s novým vzhledem formuláře

 

  1. Spusťte Visual Basic .NET 2003 a vytvořte standardní aplikaci pro Windows (Windows Application).

 

  1. Upravte následující vlastnosti formuláře:

 

Název vlastnosti formuláře

Hodnota vlastnosti

Poznámky

BackgroundImage

Plně kvalifikovaná cesta k souboru s bitovou mapou

Hodnotu vlastnosti BackgroundImage tvoří cesta k souboru s bitovou mapou. Jakmile správně nastavíte hodnotu této vlastnosti, obraz bitové mapy se objeví na formuláři.

FormBorderStyle

None

Abychom odstranili veškeré elementy původní struktury formuláře (titulkový pruh, tlačítka pro minimalizaci, maximalizaci a zavření okna, podobně jako i okraje okna), musíme nastavit vlastnost FormBorderStyle na hodnotu None.

TransparencyKey

Barva pozadí bitové mapy

Hodnota vlastnosti TransparencyKey představuje barvu, která bude při vykreslování plochy formuláře průhledná. Je tedy potřebné, abyste do vlastnosti uložili hodnotu barvy pozadí bitové mapy (v našem případě jde o červenou barvu).  

 

  1. Jestliže není plocha formuláře v režimu návrhu dostatečné velká pro zobrazení celé bitové mapy, musíte ji zvětšit. Pro zvětšení šířky a výšky formuláře po větších krocích můžete použít záchytné body, které se nacházejí kolem krajů formuláře. Pokud ovšem budete chtít dosáhnout větší přesnosti při úpravě velikosti formuláře, raději přímo modifikujte vlastnosti Width a Height složené vlastnosti Size formuláře. Finální podoba bitové mapy na formuláři by měla vypadat asi takto:

 

 

Obr. 4 – Finální podoba bitové mapy na ploše formuláře

 

  1. Spusťte aplikaci (klávesa F5) a podívejte se, zdali má formulář novou podobu. Pokud vše proběhlo úspěšně, měli byste spatřit nový tvar formuláře (obr. 5).

 

 

Obr. 5 – Nová podoba formuláře

 

Protože jste nastavili vlastnost formuláře FormBorderStyle na hodnotu None, není možné v tuto chvíli formulář zavřít pomocí myši, ani jakkoliv s ním manipulovat (ku příkladu nelze formulář přemístit na jiné místo na obrazovce). Aktivovaný formulář zavřete pomocí klávesové zkratky ALT+F4. V dalších krocích se budeme zabývat programováním základní funkčnosti formuláře. To znamená, že přidáme kód pro přemístění formuláře a jeho zavření.

 

  1. Nacházíte-li se v režimu návrhu, stiskněte klávesu F7, na což se otevře editor pro zápis programového kódu. Ihned za řádek Inherits System.Windows.Forms.Form vložte řádek pro deklaraci proměnné Pozice1 typu Point:

 

            Private Pozice1 As Point

 

  1. Vytvořte zpracovatel události MouseDown formuláře a do jeho těla vložte příkaz pro vytvoření instance struktury Point:

 

            Pozice1 = New Point(e.X, e.Y)

 

K události MouseDown dojde v okamžiku, kdy stiskněte nad plochou formuláře tlačítko myši. Abychom zaznamenali pozici bodu, na kterém došlo k stisknutí tlačítka, použijeme vlastnosti X a Y instance třídy MouseEventArgs. Tyto vlastnosti představují x-ovou, resp. y-ovou souřadnici aktivního bodu, na kterém spočinul kurzor myši.

 

  1. Vytvořte zpracovatel události MouseMove formuláře, přičemž do něj vložte tento fragment zdrojového kódu:

 

        If e.Button = MouseButtons.Left Then

            Dim Pozice2 As Point = Control.MousePosition

            Pozice2.Offset(-Pozice1.X, -Pozice1.Y)

            Location = Pozice2

        End If

 

Programový kód testuje, jaké tlačítko myši je stisknuté. Jestliže je aktivní právě levé tlačítko myši, provede se programový kód, jenž je umístěn v bloku If-Then. Zde dochází k vytvoření proměnné Pozice2, která obsahuje (ve tvaru struktury Point) obrazovkové souřadnice pozice kurzoru myši. Následně je zavolána metoda Offset struktury Point, která uskuteční posunutí specifikovaného bodu o definované souřadnice (-Pozice1.X a –Pozice1.Y). Posledním krokem je uložení obsahu proměnné Pozice2 do vlastnosti Location formuláře. Vlastnost Location formuláře obsahuje souřadnice levého horního rohu formuláře v souřadnicích obrazovky.

 

  1. Na plochu formuláře „nakreslete“ instanci ovládacího prvku Button. Vlastnost Text vložené instance změňte na Ukončit aplikaci a do událostní procedury Click instance vložte tento řádek kódu:

 

         Me.Close()

 

Jelikož je aktivace klávesové zkratky pro zavření formuláře poněkud nepraktická, pomůžeme si jinak, a sice zavoláním metody Close aktivní instance třídy Form1.

 

  1. Spusťte aplikaci, klepněte na formulář levým tlačítkem myši a pokuste se jej přemístit do jiné pozice. Měli byste vidět, jak se formulář zcela plynule pohybuje podle trajektorie kurzoru myši a zůstane „stát“ na pozici, kterou mu určíte. Po experimentování klepněte na tlačítko, čímž aplikaci ukončíte.

 

Zpět na obsah

 

Ovládací prvek ProgressBar

 

Ovládací prvek ProgressBar, nebo ukazatel průběhu, chcete-li, má v grafickém uživatelském rozhraní systémů Windows své nezastupitelné místo. Zajímavostí tohoto prvku je bezpochyby jeho zcela informační povaha. Ano, hlavním úkolem instancí ovládacích prvků ProgressBar je informovat uživatele o průběhu vykonávání jistých programových operací, kterých zdárné dokončení trvá jistou dobu. Ačkoliv by se to mohlo na první pohled zdát poněkud troufalé, je opravdu skutečností, že primárním úkolem ovládacího prvku ProgressBar je „zabavení“ uživatele po dobu, v rámci které program intenzivně pracuje s daty a není tedy většinou schopen reagovat na podněty uživatele. Pokud vaše aplikace pracuje s velkými objemy dat, zařazení ukazatele průběhu se může jevit jako opravdu dobrý nápad. Někteří programátoři sice mohou namítnout, že k informování uživatele stačí pouze změnit podobu kurzoru myši na přesýpací hodiny, ovšem jejich námitky nejsou zcela oprávněné. Ano, je pravdou, že kurzor s ikonou přesýpacích hodin vyjadřuje, že aplikace je zaneprázdněná, ovšem přesýpací hodiny nijak nezmiňují skutečnost, dokdy bude aplikace usilovně pracovat. Tuhle dysfunkci řeší právě ukazatel průběhu, který v grafické formě představuje aktuální situaci v procesu zpracování dat.

 

Z technického hlediska představuje instance ovládacího prvku ProgressBar obdélníkový region, který je postupně vyplňován jednotlivými grafickými díly. Prvek ProgressBar tak působí v roli jakési grafické stupnice. Pro každou instanci prvku je definována minimální a maximální hodnota, v rámci které se může pohybovat aktuální hodnota ukazatele průběhu. Minimální hodnota každé instance prvku ProgressBar je implicitně nastavena na nulu, zatímco maximální hodnota je rovna 100. Aktuální hodnota může tedy nabývat jakýchkoliv hodnot z intervalu <0, 100>. Přestože můžete libovolně měnit minimum a maximum ukazatele průběhu, není nutné, abyste se trápili s výpočtem velikosti jednoho grafického dílu (tento úkol za vás vyřeší Visual Basic .NET). Už jistě čekáte na praktickou ukázku ovládacího prvku ProgressBar, a proto vás již nebudu déle zdržovat. Veškeré instrukce jsou uvedeny níže:

 

  1. Spusťte Visual Basic .NET 2003 a vytvořte standardní aplikaci pro Windows (Windows Application).
  2. Na formulář přidejte jedno tlačítko a do jeho události Click vypište tento programový kód:

 

 

        'Vytvoření nové instance třídy ProgressBar.

        Dim Ukazatel As New ProgressBar

 

        'Deklarace proměnné x typu Integer, která bude sloužit jako

        'čítač v cyklu For-Next.

        Dim x As Integer

 

        'Přidání vytvořené instance třídy ProgressBar do kolekce

        'instancí formuláře.

        Me.Controls.Add(Ukazatel)

 

        'Nastavení základních vlastností vytvořené instance třídy ProgressBar.

        With Ukazatel

            'Umístění instance na dolní okraj dialogového okna.

            .Dock = DockStyle.Bottom

            'Nastavení minimální hodnoty na 1.

            .Minimum = 1

            'Nastavení maximální hodnoty na 10000.

            .Maximum = 10000

            'Nastavení kroku ukazatele průběhu na hodnotu 1. Krok ukazatele

            'resp. vlastnost Step instance třídy ProgressBar, určuje hodnotu,

            'o kterou má být inkrementována aktuální hodnota ukazatele průběhu.

            .Step = 1

        End With

 

        'Informace o zahájení akce, která se bude zobrazovat v titulkovém

        'pruhu dialogového okna.

        Me.Text = "Právě probíhá akce..."

 

        'Cyklus For-Next, v němž dochází k inkrementaci aktuální hodnoty

        'instance třídy ProgressBar. Tuto inkrementaci má na starosti metoda

        'PerformStep.

 

        For x = Ukazatel.Minimum To Ukazatel.Maximum

            Ukazatel.PerformStep()

        Next

 

        'Po ukončení operace je aktuální hodnota ukazatele průběhu nastavena

        'na minimální hodnotu.

        Ukazatel.Value = Ukazatel.Minimum

 

        'Informace o ukončení akce, která se bude zobrazovat v titulkovém

        'pruhu dialogového okna.

        Me.Text = "Akce byla úspěšně ukončena."

 

        'Uvolnění zdrojů, které byly alokovány vytvořenou instancí třídy

        'ProgressBar.

        Ukazatel.Dispose()

   

 

Jak si můžete z kódu a také z komentářů všimnout, tato ukázka práce instance ovládacího prvku ProgressBar je řízena zcela pomocí programového kódu. Ukázku dialogového okna s ukazatelem průběhu v akci můžete vidět na obr. 6.

 

 

Obr. 6 – Ukazatel průběhu v akci

 

Zpět na obsah

 

 

Právě jste dočetli poslední tip sekce Programátorská laboratoř. 

 

Jestliže se chcete dozvědět více informací o programování ve Visual Basicu .NET, neváhejte a navštivte také další sekce rubriky Visual Basic. A jakáže je dnešní nabídka?

Téma měsíce

OOP a Visual Basic .NET (1. díl)

Seriál Začínáme s VB .NET

Charakteristika logických operátorů AndAlso a OrElse.