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.