IntegrovanΘ prost°edφ rubriky Visual Basic |
Autor: Jßn Hanßk |
||||||||
|
Programßtorskß laborato° |
||||||||
Prostor pro experimentovßnφ |
|||||||||
╚asovß nßroΦnost (min): 75 |
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 SP3 Visual Basic .NET
2002 Äßdn² Äßdn² |
|||||||
|
Nep°ehlΘdn∞te exkluzivnφ
Specißl pro programßtory, kter² pojednßvß o jazykovΘ interoperabilit∞ mezi
jazyky Managed Extensions for C++ a Visual Basic .NET. |
||||||||
|
Tvorba zapeΦet∞nΘ t°φdy
V jist²ch situacφch je pro programßtora
ne₧ßdoucφ, aby t°φda, kterou vytvo°il sv²mi vlastnφmi silami, byla zdrojem pro
dalÜφ odvozenΘ t°φdy. Jestli₧e programßtor pou₧ije v deklaraci t°φdy
klφΦovΘ slovo NotInheritable, v²slovn∞ na°izuje, ₧e danß t°φda nem∙₧e slou₧it jako bßzovß t°φda.
T°φd∞ s uveden²mi charakteristikami se °φkß zapeΦet∞nß t°φda. Pokud
porovnßme standardnφ t°φdu a jejφ zapeΦet∞nou kolegyni, m∙₧eme pozorovat, ₧e primßrnφm
rozdφlem mezi t∞mito dv∞ma t°φdami je jejich chovßnφ p°i d∞d∞nφ.
|
Pod pojmem ästandardnφ t°φdaô budeme v nßsledujφcφm textu rozum∞t
t°φdu, v deklaraci kterΘ se nenachßzφ klφΦovΘ slovo NotInheritable,
jako₧to ani jinΘ modifikßtory, kterΘ jak²mkoliv zp∙sob ovliv≥ujφ chovßnφ
t°φdy. |
Zatφmco od standardnφ t°φdy m∙₧eme odvodit
tolik podt°φd, kolik budeme chtφt, zapeΦet∞nß t°φda touto dovednostφ
nedisponuje. OvÜem ob∞ t°φdy mohou vytvß°et svΘ instance, v tomto sm∞ru se
zapeΦet∞nß t°φda chovß ·pln∞ stejn∞ jako jejφ standardnφ prot∞jÜek.
I kdy₧ nenφ tvorba zapeΦet∞nΘ t°φdy zcela
b∞₧nou zßle₧itostφ, existuje n∞kolik pßdn²ch d∙vod∙ pro oznaΦenφ t°φdy klφΦov²m
slovem NotInheritable:
ZapeΦet∞nΘ t°φdy jsou zpravidla t°φdy, jejich₧
stavba pln∞ pokr²vß vy°eÜenφ jistΘ problematiky. JednoduÜe °eΦeno, zapeΦet∞nß
t°φda obsahuje vÜechny prvky (vlastnosti, metody a datovΘ Φleny), kterΘ budou
instance tΘto t°φdy vyu₧φvat. ZapeΦet∞nß t°φda je tak daleko objemn∞jÜφ a
robustn∞jÜφ jako jakßkoliv jinß t°φda. Tato skuteΦnost vypl²vß prßv∞
z faktu, ₧e zapeΦet∞nß t°φda si äveze vÜechno s sebouô. Abyste vid∞li
hlavnφ rozdφly mezi nßvrhem a tvorbou standardnφ a zapeΦet∞nΘ t°φdy, uve∩me si
n∞kterΘ podstatnΘ znaky (tab. 1).
KomparaΦnφ
znaky |
Typ
t°φdy |
|
Standardnφ
t°φda |
ZapeΦet∞nß
t°φda |
|
Proces
nßvrhu |
P°i nßvrhu
standardnφ t°φdy je ve v∞tÜin∞ p°φpad∙ brßn do ·vahy po₧adavek na pozd∞jÜφ
rozÜi°itelnost t°φdy pomocφ d∞diΦnosti, a proto se standardnφ t°φda navrhuje
jako bßzovß t°φda. To znamenß, ₧e do bßzovΘ t°φdy je za°azena pouze vÜeobecnß,
resp. zßkladnφ funkcionalita, ovÜem veÜkerΘ konkrΘtnφ nebo specifickΘ rysy
jsou implementovßny a₧ v odvozen²ch t°φdßch. |
Proces nßvrhu
zapeΦet∞nΘ t°φdy musφ poz∙stßvat z peΦlivΘ anal²zy vÜech aspekt∙
funkcionality tΘto t°φdy. Proto₧e charakter zapeΦet∞nΘ t°φdy nem∙₧e b²t pozd∞ji
rozÜφ°en v podt°φdßch, musφ zapeΦet∞nß t°φda obsahovat vÜechny Φleny,
kterΘ budou instance tΘto t°φdy ke svΘ prßci pot°ebovat. |
D∞diΦnost |
OdvozenΘ t°φdy
vznikajφ na zßklad∞ techniky jednoduchΘ d∞diΦnosti, kterß je p°φmo
podporovßna platformou .NET (p°esn∞ji spoleΦnou jazykovou specifikacφ û
Common Language Specification).
Standardnφ t°φda nenφ v procesu d∞d∞nφ nijak omezena, a proto je mo₧nΘ
vytvß°et libovolnΘ mno₧stvφ podt°φd. á |
ZapeΦet∞nß t°φda
d∞diΦnost nepodporuje, co₧ znamenß, ₧e nem∙₧e slou₧it jako bßzovß t°φda pro
tvorbu odvozen²ch t°φd. |
RozÜφ°enφ |
RozÜφ°enφ standardnφ
t°φdy m∙₧e v zßsad∞ probφhat ve dvou sm∞rech: ╖
rozÜφ°φ
se p°φmo programov² k≤d standardnφ t°φdy ╖
rozÜφ°enφ
se uskuteΦnφ upravenφm programovΘho k≤du odvozen²ch t°φd |
RozÜφ°enφ zapeΦet∞nΘ
t°φdy se musφ uskuteΦnit prost°ednictvφm zaΦlen∞nφ dodateΦnΘho programovΘho
k≤du do samotnΘ zapeΦet∞nΘ t°φdy. |
Vytvß°enφ
instancφ |
Plnß podpora
vytvß°enφ instancφ t°φdy.* |
Plnß podpora
vytvß°enφ instancφ t°φdy.* |
* Za p°edpokladu, ₧e
programßtor nezaΦlenil do k≤du t°φdy privßtnφ konstruktor. |
* Za p°edpokladu, ₧e
programßtor nezaΦlenil do k≤du t°φdy privßtnφ konstruktor. |
á
Tab. 1 û Komparace standardnφ a zapeΦet∞nΘ t°φdy
Na nßsledujφcφch °ßdcφch je uveden v²pis
zdrojovΘho k≤du zapeΦet∞nΘ t°φdy:
Option Strict
On
Public NotInheritable
Class ZapeΦet∞nßT°φda
ááá Private
m_PoΦet As Byte
ááá Public Property ZjistitPoΦetFormulß°∙() As Byte
ááááááá Get
ááááááááááá Return
m_PoΦet
ááááááá End Get
ááááááá Set(ByVal Value As Byte)
ááááááááááá m_PoΦet = Value
ááááááá End Set
ááá End Property
ááá Public Sub Vytvo°itFormulß°e(ByVal
PoΦet As Byte)
ááááááá m_PoΦet = PoΦet
ááááááá If
PoΦet <= 0 Or PoΦet > 10 Then
ááááááááááá MessageBox.Show("Bylo zadßno
nevhodnΘ Φφslo (" & PoΦet _
ááááááááááá & ") pro poΦet formulß°∙."
& vbCrLf & _
ááááááááááá "Nynφ bude zobrazen dialog, v
n∞m₧ budete moci zadat " & _
ááááááááááá "sprßvnΘ Φφslo pro poΦet
formulß°∙.", "Zprßva o chyb∞", _
ááááááááááá MessageBoxButtons.OK,
MessageBoxIcon.Error)
ááááááááááá Dim
odp As Byte = CByte(InputBox _
ááááááááááá ("Zadejte Φφslo pro poΦet
formulß°∙ (<1, 10>).", _
ááááááááááá "UrΦenφ poΦtu formulß°∙",
"1"))
ááááááááááá PoΦet = odp
ááááááááááá GoTo
Tvorba_Formulß°∙
ááááááá Else
Tvorba_Formulß°∙:
ááááááááááá Dim
a As Byte
ááááááááááá Dim
frm(PoΦet - 1) As Form
ááááááááááá For
a = 0 To CByte(PoΦet
- 1)
ááááááááááááááá frm(a) = New Form()
ááááááááááááááá With
frm(a)
ááááááááááááááááááá .Text = "Formulß° Φ.
" & a + 1
ááááááááááááááááááá .Show()
ááááááááááááááá End
With
ááááááááááááááá Application.DoEvents()
ááááááááááá Next
ááááááá End If
ááá End Sub
End Class
Ukßzkovß zapeΦet∞nß t°φda slou₧φ na vytvß°enφ
polφ instancφ t°φdy Form. Jak si m∙₧ete vÜimnout, v t∞le
t°φdy se nachßzφ ve°ejnß metoda Vytvo°itFormulß°e, kterß odvßdφ
veÜkerou pot°ebnou prßci. PoΦet vytvo°en²ch formulß°∙ je ulo₧en do soukromΘho
datovΘho Φlenu s nßzvem m_PoΦet. Hodnotu Φlenu m_PoΦet lze zφskat zavolßnφm ve°ejnΘ vlastnosti ZjistitPoΦetFormulß°∙. V∞°φm, ₧e jako profesionßlnφm programßtor∙m je vßm k≤d zapeΦet∞nΘ
t°φdy vφcemΘn∞ jasn², ovÜem cht∞l bych vßs upozornit na tyto skuteΦnosti:
|
VÜimn∞te si, ₧e v k≤du nenφ proveden test nßvratovΘ hodnoty
funkce InputBox (jednoduÜe p°edpoklßdßme, ₧e u₧ivatel zadß sprßvnou
hodnotu z ohraniΦenΘho celoΦφselnΘho intervalu). Pokud bude tento k≤d
pou₧φvat v reßln²ch aplikacφch, ujist∞te se, ₧e jste provedli takΘ test
nßvratovΘ hodnoty funkce InputBox. A to z toho d∙vodu, ₧e i kdy₧
se u₧ivatel ji₧ jednou zm²lil, nenφ v∙bec vylouΦeno, ₧e tak ud∞lß i
podruhΘ.á |
áá á
K pou₧itφ instance zapeΦet∞nΘ t°φdy nßm
bude staΦit n∞kolik °ßdk∙ programovΘho k≤du:
ááááááá Dim x As New
ZapeΦet∞nßT°φda()
ááááááá x.Vytvo°itFormulß°e(3)
ááááááá Me.Text
= "PoΦet vytvo°en²ch formulß°∙: " & _
ááááááá CStr(x.ZjistitPoΦetFormulß°∙)
P°φstup k registr∙m operaΦnφho systΘmu Windows
Snad vÜichni programßto°i a v²vojß°i cht∞jφ,
aby byly jejich aplikace co mo₧nß nejvφc u₧ivatelsky p°φv∞tivΘ. U₧ivatelskß
p°φv∞tivost je znaΦn∞ rozsßhl² pojem, jen₧ v sob∞ absorbuje velkΘ mno₧stvφ
doporuΦen²ch standard∙, kterΘ °φkajφ, jak mß aplikace vypadat a jak se mß
chovat. Dodr₧ovßnφm t∞chto standard∙ tak mohou programßto°i zabezpeΦit, ₧e
u₧ivatel∙m se bude s aplikacφ pracovat pohodln∞, rychle a bez jak²chkoliv
potφ₧φ. Jednφm z po₧adavk∙, kterΘ jsou na reßlnou aplikaci kladeny, je
schopnost aplikace pamatovat si pot°ebnΘ informace o stavech, v nich₧ se
b∞hem svΘ Φinnosti ocitla. Tak si aplikace m∙₧e pamatovat seznam posledn∞
otev°en²ch soubor∙, p°esnou pozici svΘho dialogovΘho okna, nebo Φasov² interval
pro automatickΘ ulo₧enφ editovanΘho dokumentu. Na ulo₧enφ a poslΘze naΦφtanφ
vÜech uveden²ch informacφ lze s v²hodou vyu₧φt registr∙ operaΦnφho
systΘmu.
Ve Visual Basicu .NET m∙₧eme aplikovat dv∞
koncepce p°φstupu k registr∙m:
Abyste vid∞li, jak ob∞ koncepce pracujφ,
ukß₧eme si jejich pou₧itφ v praxi. Poka₧dΘ provedeme vytvo°enφ registrovΘho
klφΦe, jemu₧ p°i°adφme p°φsluÜnou hodnotu a tuto hodnotu naplnφme p°edem
urΦen²mi daty.
|
P°i prßci s registry je zapot°ebφ odliÜovat dva pojmy: jmΘno
hodnoty a data hodnoty. Zatφmco jmΘno hodnoty p°edstavuje textov² °et∞zec,
kter² hodnotu u₧ivatelsky deklaruje, data hodnoty determinujφ hodnotu po
datovΘ strßnce. JednoduÜe °eΦeno, data hodnoty jsou vlastnictvφm hodnoty, a
jsou to prßv∞ data, kterΘ jsou p°edm∞tem vstupn∞-v²stupnφch operacφ p°i prßci
s registry. Mezi data hodnoty mohou pat°it Φφsla, textovΘ °et∞zce, nebo
specifickΘ konstanty.á |
|
Registry operaΦnφho systΘmu jsou velmi d∙le₧itou entitou, a to jak ve
vztahu k nainstalovan²m aplikacφm, tak i v∙Φi samotnΘmu operaΦnφmu
systΘmu. P°ed zßsahem do registr∙ prove∩te v₧dy nejprve jejich zßlohu. P°i
zßsazφch do registr∙ se ujist∞te, ₧e nemodifikujete ·daje, kterΘ byly zapsßny
jinou aplikacφ a p°φmo upravujte jenom ty informace, kterΘ jste do registr∙ sami
zapsali.á |
Demonstrace starΘ koncepce p°φstupu k registr∙m
Postupujte podle nßsledujφcφch instrukcφ:
ááá Private Sub btnZßpisHodnot_Click(ByVal
sender As System.Object, _
ááá ByVal e As System.EventArgs) Handles
btnZßpisHodnot.Click
ááááááá SaveSetting("MojeAplikace",
"Data", "ID aplikace", "1001")
ááá End Sub
ááá Private Sub btn╚tenφHodnot_Click(ByVal
sender As System.Object, _
ááá ByVal e As System.EventArgs) Handles
btn╚tenφHodnot.Click
ááááááá MessageBox.Show("ID aplikace je:
" & _
ááááááá GetSetting("MojeAplikace",
"Data", "ID aplikace"))
ááá End Sub
Obr. 1 û Pou₧itφ funkcφ SaveSetting a GetSetting
pro p°φstup k hodnot∞ ulo₧enΘ v registrech
Demonstrace novΘ koncepce p°φstupu k registr∙m
Jak jsme si ji₧ °ekli, p°i pou₧itφ tΘto
koncepce se vyhneme pou₧itφ funkcφ typu SaveSetting a GetSetting. Mφsto nich toti₧ povolßme
k prßci specializovanΘ t°φdy Registry a RegistryKey z jmennΘho prostoru Microsoft.Win32. Postupujte
takto:
Imports
Microsoft.Win32
ááá áááá
ááá Private Sub btnZßpisHodnot2_Click(ByVal
sender As System.Object, _
ááá ByVal e As System.EventArgs) Handles
btnZßpisHodnot2.Click
ááááááá Dim reg
As RegistryKey
ááááááá reg =
Registry.LocalMachine.CreateSubKey("Software\MojeAplikace\Data")
ááááááá reg.SetValue("ID aplikace",
"1002")
ááá End Sub
Pohled do registr∙ p°ibli₧uje obr. 2.
Obr. 2 û Pou₧itφ t°φd Registry
a RegistryKey pro p°φstup k hodnot∞ ulo₧enΘ v registrech
I kdy₧ op∞t vytvß°φme klφΦ se stejn²m nßzvem,
v tomto p°φpad∞ je klφΦ ulo₧en do jinΘ sekce registr∙ (p°esn∞ji do HKEY_LOCAL_MACHINE\Software). Abychom zφskali p°φstup do tΘto sekce registr∙, musφme pou₧φt t°φdu Registry a jejφ ve°ejn² sdφlen² datov² Φlen LocalMachine. Pro vytvo°enφ novΘho klφΦe pou₧ijeme metodu CreateSubKey, kterΘ p°edßme dopl≥kovou cestu ke klφΦi v uvedenΘ podob∞ (plnß
cesta k naÜemu klφΦi vypadß takto: HKEY_LOCAL_MACHINE\Software\MojeAplikace\Data). Nßvratovou hodnotou metody CreateSubKey je instance t°φdy RegistryKey, p°iΦem₧ odkaz na tuto instanci je
ulo₧en do prom∞nnΘ reg. Dobrß,
v tΘto chvφli mßme vytvo°en klφΦ, ovÜem nßÜ ·kol jeÜt∞ nenφ spln∞n.
Abychom klφΦi p°i°adili hodnotu a hodnotu asociovali s platn²mi daty,
zavolßme metodu SetValue,
kterß nabφdneme jmΘno hodnoty ve tvaru datovΘho typu String ("ID aplikace") a data hodnoty (1002).
Budete-li chtφt data hodnoty naΦφst, upravte udßlostnφ
proceduru btn╚tenφHodnot2_Click tak, jak je uvedeno
nφ₧e:
ááá Private Sub
btn╚tenφHodnot2_Click(ByVal sender As System.Object, _
ááá
ByVal e As
System.EventArgs) Handles btn╚tenφHodnot2.Click
ááááááá Dim
reg2 As RegistryKey
ááááááá reg2 =
Registry.LocalMachine.OpenSubKey("Software\MojeAplikace\Data", False)
ááááá
ááMessageBox.Show("Hodnota
zapsanß v registrech: " & _
ááááááá CStr(reg2.GetValue("ID
aplikace")))
ááá
End Sub
Abychom otev°eli po₧adovan² registrov² klφΦ, zavolßme metodu OpenSubKey. V naÜem p°φpad∞ je pou₧ita p°etφ₧enß varianta metody, kterß
pracuje se dv∞ma parametry: prvnφm je nßzev klφΦe a druh²m pak booleovskß
hodnota, kterß urΦuje, zdali je mo₧nΘ hodnotu klφΦe modifikovat. K dat∙m
hodnoty se dostaneme pomocφ metody GetValue, kterß
poskytneme jmΘno hodnoty, data kterΘ chceme obdr₧et. Metoda GetValue vracφ data hodnoty (v podob∞ datovΘho typu Object), kterß jsou v naÜφ ukßzce p°etypovßna do podoby datovΘho typu String a zobrazena v dialogu.
Vytvß°enφ vlastnφho delegßta
P°echßzφte-li na programovßnφ pro platformu .NET, zcela jist∞ si
zanedlouho vÜimnete specißlnφho programovacφho aparßtu, kter² se doposud
v programovßnφ nevyskytoval. Ano, touto novinkou jsou delegßti, neboli
objekty, kterΘ usnad≥ujφ p°φstup k metodßm a funkcφm jin²ch objekt∙ za b∞hu
programu. O delegßtech se Φasto mluvφ jako o typov∞ bezpeΦn²ch funkΦnφch
ukazatelφch. Pokud pat°φte mezi programßtory v C/C++, mohli byste namφtat,
₧e funkΦnφ ukazatele jsou tady ji₧ n∞jak² ten pßtek, tak jakß₧to novinka. OvÜem,
v jistΘm smyslu mßte pravdu, avÜak t°eba zd∙raznit, ₧e delegßty nabφzejφ
daleko v∞tÜφ funkcionalitu ne₧li opravdovΘ funkΦnφ ukazatele. Krom∞ toho,
s delegßty m∙₧ete pracovat v mnoha .NET jazycφch, nap°. v C# Φi
Managed Extensions for C++.
V dneÜnφ ukßzce si p°edvedeme, jak sestrojit vlastnφho delegßta.
JeÜt∞ p°edtφm se vÜak podφvejme na zßkladnφ zp∙sob prßce delegßta. Delegßt je
objekt, jen₧ m∙₧e za b∞hu aplikace zφskat runtime adresu po₧adovanΘ procedury a
poslΘze tuto proceduru aktivovat. Ve skuteΦnosti ovÜem m∙₧e delegßt aktivovat
jakoukoliv proceduru, kterß mß stejn² seznam parametr∙ a stejnou nßvratovou
hodnotu jako samotn² delegßt. Delegßt tak nemusφ nutn∞ volat jednu a tu samou
proceduru, nebo¥ je schopen aktivovat libovolnou proceduru, kterß vyhovuje
po₧adovan²m podmφnkßm. Rozhodnutφ, kterou proceduru zavolat, lze vy°eÜit a₧ za
b∞hu aplikace. áá
Obr. 3 û SchematickΘ
znßzorn∞nφ prßce delegßta
A nynφ si uka₧me, jak p°istoupit k tvorb∞ delegßta:
Option Strict
On
'Vlo₧enΘ
odkazy na pot°ebnΘ jmennΘ prostory.
Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class
Form1
ááá Inherits
System.Windows.Forms.Form
ááá 'Deklarace
delegßta.
ááá Private Delegate Function
Delegßt() As Boolean
ááá '****** Deklarace
prvnφ cφlovΘ funkce. ******
ááá 'Funkce vytvß°φ
instanci t°φdy ListBox, do kterΘ budou ulo₧ena
ááá 'nßhodn∞
vygenerovanß Φφsla.
ááá Private Function MojeFunkce() As
Boolean
ááááááá Try
ááááááááááá 'Vytvo°enφ
instance t°φdy ListBox a jejφ umφst∞nφ
ááááááááááá 'do
kolekce ovlßdacφch prvk∙ formulß°e.
ááááááááááá Dim
lstSeznam As New
ListBox()
ááááááááááá With
lstSeznam
ááááááááááááááá .Location = New Point(0, 0)
ááááááááááááááá .Size = New Size(Me.Width \ 2, Me.Height \ 2)
ááááááááááá End
With
ááááááááááá Me.Controls.Add(lstSeznam)
ááááááááááá 'V²poΦet
druhΘ mocniny Φφsel z intervalu <0, 9>.
ááááááááááá Dim
a As Byte
ááááááááááá a = 0
ááááááááááá Do While a < 10
ááááááááááááááá Dim
x As Short
ááááááááááááááá x = CShort(a
^ 2)
ááááááááááááááá lstSeznam.Items.Add(x)
ááááááááááááááá a += CByte(1)
ááááááááááá Loop
ááááááááááá 'Zachycenφ
jakΘkoliv v²jimky, kterß by mohla b²t generovßna.
ááááááá Catch e
As Exception
ááááááááááá 'Dojde-li
k chyb∞, funkce je ukonΦena a vracφ hodnotu False.
ááááááááááá Return
False
ááááááá End Try
ááááááá 'P°i ·sp∞ÜnΘm
ukonΦenφ funkce je vrßcena hodnota True.
ááááááá Return True
ááá End Function
ááá '****** Deklarace
druhΘ cφlovΘ funkce. ******
ááá 'Funkce vypl≥uje
plochu formulß°e gradientnφ v²plnφ.
ááá Private Function MojeKreslφcφFunkce() As Boolean
ááááááá Try
ááááááááááá 'Vytvo°enφ
instance t°φdy Rectangle
ááááááááááá Dim
rec As New
Rectangle(New Point(0, 0), _
ááááááááááááááááááá New
Size(Me.Width, Me.Height))
ááááááááááá 'Vytvo°enφ
grafickΘho Üt∞tce pomocφ t°φdy LinearGradientBrush
ááááááááááá Dim
br As New
LinearGradientBrush(rec, Color.Gold, _
ááá ááááááááColor.Magenta,
LinearGradientMode.ForwardDiagonal)
ááááááááááá 'Vytvo°enφ
grafickΘho objektu
ááááááááááá Dim
g As Graphics = Me.CreateGraphics()
ááááááááááá 'Kreslenφ
gradientnφ v²pln∞.
ááááááááááá g.FillRectangle(br, rec)
ááááááá Catch e
As Exception
ááááááááááá 'Dojde-li
k chyb∞, funkce je ukonΦena a vracφ hodnotu False.
ááááááááááá Return
False
ááááááá End Try
ááááááá 'P°i ·sp∞ÜnΘm
ukonΦenφ funkce je vrßcena hodnota True.
ááááááá Return True
ááá End Function
ááá Private Sub Form1_Click(ByVal
sender As Object,
_
ááá ByVal e As System.EventArgs) Handles
MyBase.Click
ááááááá 'Inicializace
generßtoru nßhodn²ch Φφsel na bßzi systΘmovΘho Φasu
ááááááá Randomize()
ááááááá 'Deklarace
prom∞nnΘ, ve kterΘ bude ulo₧eno zφskanΘ
ááááááá 'nßhodnΘ
Φφslo
ááá ááááDim sHodnota As Short
ááááááá 'Vytvo°enφ
referenΦnφ prom∞nnΘ, kterß bude uchovßvat odkaz
ááááááá 'na pozd∞ji
vytvo°enou instanci delegßta
ááááááá Dim
InstanceDelegßta As Delegßt
ááááááá 'Generovßnφ
nßhodnΘho Φφsla z intervalu <1,10>
ááááááá sHodnota = CShort(Int(10
* Rnd()) + 1)
ááááááá 'Jestli₧e je
vygenerovanΘ Φφslo z intervalu <1,5> tak...
ááááááá If
sHodnota >= 1 And sHodnota <= 5 Then
ááááááááááá 'Vytvo°enφ
instance delegßta, kterß obsahuje
ááááááááááá 'runtime
adresu funkce MojeFunkce
ááááááááá ááInstanceDelegßta = New
Delegßt(AddressOf MojeFunkce)
ááááááááááá 'jinak...
ááááááá Else
ááááááááááá 'Vytvo°enφ
instance delegßta, kterß obsahuje runtime
ááááááááááá 'adresu
funkce MojeKreslφcφFunkce
ááááááááááá InstanceDelegßta = New Delegßt(AddressOf
MojeKreslφcφFunkce)
ááááááá End If
ááááááá 'Test
nßvratovΘ hodnoty cφlovΘ funkce
ááááááá If
InstanceDelegßta.Invoke() Then
ááááááááááá Me.Text
= "Funkce byla ·sp∞Ün∞ zavolßna."
ááááááá Else
ááááááááááá Me.Text
= "P°i prßci funkce doÜlo k potφ₧φm."
ááááááá End If
ááá End Sub
End Class
|
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? |
|
Programovßnφ vφcevlßknov²ch aplikacφ |
||
Klasifikace
operßtor∙, aritmetickΘ a porovnßvacφ operßtory. |
Nep°ehlΘdn∞te exkluzivnφ
Specißl pro programßtory, kter² pojednßvß o jazykovΘ interoperabilit∞ mezi
jazyky Managed Extensions for C++ a Visual Basic .NET. |