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. |