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
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í:
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ě.
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.
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:
Obr. 3 – Potenciální podoba bitmapy s novým
vzhledem 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). |
Obr. 4 – Finální podoba bitové mapy na ploše formuláře
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í.
Private Pozice1 As
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.
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.
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.
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:
'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
|
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? |
|
OOP a Visual Basic .NET (1. díl) |
||
Charakteristika logických operátorů AndAlso a OrElse. |