|
ZaΦßteΦnφk |
PokroΦil² |
Profesionßl |
|||||
|
|
|
||||||
Prostor
pro experimentovßnφ Programßtorskß laborato° |
||||||||
|
|
Budete pot°ebovat
p°ibli₧n∞ 1 hodinu |
|
OperaΦnφ systΘm
pou₧it² v p°φsp∞vku: Windows XP V²vojovΘ nßstroje:
Visual Basic .NET |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UrΦenφ startovnφ pozice pro formulß°
Startovnφ pozici pro formulß° m∙₧ete urΦit
vhodn²m nastavenφm vlastnosti StartPosition v dob∞
nßvrhu aplikace. Pokud nap°φklad chcete, aby byl formulß° p°i b∞hu aplikace
centrovßn, nastavte vlastnost StartPosition na hodnotu CenterScreen (obr. 1).á
Obr. 1 û Nastavenφ
vlastnosti StartPosition na hodnotu CenterScreen
PlynulΘ zmiznutφ formulß°e
Jak jsme si v minulΘm dφlu ProgramßtorskΘ
laborato°e ukßzali, pro zm∞nu pr∙hlednosti formulß°e lze vhodn∞ vyu₧φt jeho
vlastnost Opacity. V nßsledujφcφm experimentu si budeme demonstrovat pou₧itφ tΘto
vlastnosti v praxi a vytvo°φme tak efekt äplynulΘho zmiznutφô formulß°e
p°i stisknutφ tlaΦφtka. Do obsluhy udßlosti Click tlaΦφtka zapiÜte tento fragment programovΘho k≤du:
ááááááá Dim x As Double
ááááááá For x =
1 To 0 Step
-0.1
ááááááááááá System.Threading.Thread.Sleep(50)
ááááááááááá Application.DoEvents()
ááááááááááá Me.Opacity
= x
ááááááá Next x
ááááááá Environment.Exit(0)
Popis
k≤du
Nejd°φv deklarujeme prom∞nnou x, kterß je typu Double. PotΘ napφÜeme
konstrukci cyklu For-Next, do kterΘ umφstφme uvedenΘ °ßdky
s k≤dem. Aby byla ka₧dß dekrementace hodnoty vlastnosti Opacity viditelnß, äuspφmeô aplikaci metodou Sleep p°i ka₧dΘm pr∙chodu cyklem na 50 milisekund. Dßle pou₧ijeme metodu DoEvents, kterß zabezpeΦφ, ₧e aplikace bude i nadßle reagovat na vn∞jÜφ
podn∞ty. Poslednφ p°φkaz uvnit° cyklu upravuje hodnotu Opacity aktivnφho formulß°e (Me). Poslednφ °ßdek k≤du
pak ukonΦφ exekuci aplikace.ááá
Modifikace souboru
AssemblyInfo.vb
Soubor AssemblyInfo.vb sdru₧uje prost°ednictvφm r∙zn²ch atribut∙ informace o vyvφjenΘ aplikaci. Vhodnou ·pravou t∞chto atribut∙ lze docφlit toho, aby n∞kterΘ informace byly viditelnΘ i pro finßlnφho u₧ivatele vaÜφ aplikace. Pokud v prost°edφ operaΦnφho systΘmu Windows XP zvolφte p°i zobrazovßnφ soubor∙ pohled Titles, p°i ikon∞ aplikace se budou nachßzet i dalÜφ, dodateΦnΘ informace. Na obr. 2 m∙₧ete vid∞t informace o aplikaci Notepad.
Obr. 2 û Podoba ikony aplikace
p°i pou₧itφ pohledu Titles
Chcete-li, aby i vaÜe aplikace ovlßdala tuto ävymo₧enostô, ud∞lejte toto:
Obr. 3 û Modifikovan² soubor AssemblyInfo.vb
Obr. 4 û V²slednφ podoba
ikony aplikace
P°idßnφ polo₧ky nabφdky za
b∞hu programu
á ááá
V tΘto ukßzce si
popφÜeme postup, jak lze äprogramov∞ô p°idat do projektu hlavnφ nabφdku Soubor
a dßle polo₧ku Nov², po aktivaci kterΘ se zobrazφ u₧ivatelskß
zprßva.
Postupujte dle instrukcφ:
ááááááá Dim
menu As New
MainMenu()
ááááááá 'vytvo°enφ
hlavnφ nabφdky
ááááááá Me.Menu
= menu
ááááááá 'p°i°azenφ
hlavnφ nabφdky k aktivnφmu formulß°i
ááááááá Dim
Soubor As MenuItem
ááááááá Soubor = New
MenuItem("Soubor")
ááááááá 'vytvo°enφ
nabφdky "Soubor"
ááááááá Dim
Novy As MenuItem
ááááááá Novy = New
MenuItem("Nov²", _
ááááááá New
EventHandler(AddressOf Zobrazit_zpravu))
ááááááá 'vytvo°enφ
pod°azenΘ polo₧ky "Nov²" nabφdky "Soubor"
ááááááá menu.MenuItems.Add(Soubor)
ááááááá 'p°idßnφ
nabφdky "Soubor" do hlavnφ nabφdky
ááááááá Soubor.MenuItems.Add(Novy)
áááá 'p°idßnφ polo₧ky
"Nov²" do nabφdky "Soubor"
Nejd°φve
ze vÜeho vytvo°φme hlavnφ nabφdku MainMenu, kterß p°edstavuje kolekci
objekt∙ typu MenuItem. PokraΦujeme tφm, ₧e tuto hlavnφ
nabφdku p°i°adφme k prßv∞ aktivnφmu formulß°i. Dßle vytvo°φme nabφdku Soubor
a potΘ i polo₧ku Nov², kterß se bude nachßzet
v nabφdce Soubor. P°i tvorb∞ polo₧ky Nov²
dßle specifikujeme i nßzev procedury (Zobrazit_zpravu), kterß se bude aktivovat
v₧dy, kdy₧ u₧ivatel klikne na tuto polo₧ku. Nakonec do hlavnφ nabφdky (MainMenu) p°idßme vytvo°enou nabφdku Soubor a do nabφdky Soubor
p°idßme polo₧ku Nov². á
áá
ááá Private Sub Zobrazit_zpravu(ByVal
sender As Object,
_
ááá ByVal e As System.EventArgs)
ááá MessageBox.Show("Pou₧itφm tΘto polo₧ky
vytvo°φte nov² objekt.")
áEnd Sub
|
Do procedury Zobrazit_zpravu m∙₧ete zadat k≤d
podle vaÜich pot°eb, nap°φklad by zde mohl b²t vlo₧en k≤d pro skuteΦnΘ
vytvo°enφ novΘho souboru Φi novΘho objektu. |
Kdy₧ spustφte aplikaci a
klepnete na tlaΦφtko, vytvo°φ se nabφdka Soubor, kterß bude obsahovat
polo₧ku Nov². Aktivujete-li tuto polo₧ku,
zobrazφ se zprßva s textem. Situaci ilustruje obr. 5.
Obr.
5 û Proces p°idßnφ nabφdky Soubor a polo₧ky Nov² na formulß°
Ukßzka prßce Garbage
Collection
Princip prßce Garbage Collection (GC) je podrobn∞ popsßn v tomto vydßnφ
serißlu o Visual Basicu .NET. V tΘto chvφli se ovÜem zam∞°φme na
praktickou ukßzku Φinnosti Garbage Collection.
Vytvo°φme n∞kolik tisφc instancφ ukßzkovΘho objektu v pam∞ti poΦφtaΦe a
budeme pozorovat, jak se s touto situacφ vypo°ßdß Garbage Collection.
Nßsledujte uveden² postup:
Public Class
Objekt_01
ááá Public Shared Instance_objektu As
Long
ááá Public Sub New()
ááááááá Instance_objektu += 1
ááá End Sub
ááá Protected Overrides Sub
Finalize()
ááááááá Instance_objektu -= 1
ááá End Sub
End
Class
áááááá Dim x As Integer, obj
áááááá For x =
1 To 5000
áááááááááá obj = New
Objekt_01()
áááááá Next x
Me.Text = "PoΦet instancφ objektu
v pam∞ti: " & Objekt_01.Instance_objektu
V₧dy, kdy₧ klepnete na tlaΦφtko, vytvo°φ se
v pam∞ti poΦφtaΦe 5000 instancφ objektu Objekt_01. V₧dy, kdy₧ je objekt vytvo°en, je paraleln∞ inkrementovßna i prom∞nnß
Instance_objektu (k≤d pro inkrementaci se nachßzφ v konstruktoru t°φdy). PoΦet
vytvo°en²ch instancφ sleduje v 50 milisekundov²ch intervalech ovlßdacφ
prvek Timer, kter² v titulkovΘm pruhu okna aplikace takΘ zobrazuje zprßvu o
poΦtu platn²ch objektov²ch instancφ v pam∞ti poΦφtaΦe (obr. 6).
Obr. 6 û Vytvo°enφ 15000
instancφ objektu v pam∞ti
V Φem tedy spoΦφvß samotnΘ jßdro
problematiky? Garbage Collection sleduje vÜechny referenΦnφ
prom∞nnΘ a rovn∞₧ tak reference na jednotlivΘ instance objektu. áAbyste d∙kladn∞ pochopili tuto situaci,
uva₧ujte o objektovΘ prom∞nnΘ obj, kterß je deklarovßna
v udßlosti Click tlaΦφtka. Prom∞nnß obj je prom∞nnou referenΦnφho typu a obsahuje tedy referenci na p°φsluÜnou
instanci objektu Objekt_01. Proto₧e oborem platnosti tΘto
prom∞nnΘ je jenom obsluha udßlosti Click tlaΦφtka, je ihned
po ukonΦenφ exekuce programovΘho k≤du danΘ obsluhy udßlosti objektovß prom∞nnß
zlikvidovßna. V tΘto chvφli dojde i k destrukci reference na instanci
objektu Objekt_01. To vÜechno sleduje Garbage Collection a zabezpeΦuje
odstran∞nφ ji₧ nepot°ebn²ch instancφ objektu z pam∞ti poΦφtaΦe. P°i
likvidaci instance objektu se provede programov² k≤d umφst∞n²
v destruktoru t°φdy (dojde k dekrementaci prom∞nnΘ Instance_objektu).á
VyzkouÜejte tento postup:
Po rozb∞hnutφ aplikace klepn∞te n∞kolikrßt na
tlaΦφtko a vytvo°te dostateΦn² poΦet instancφ objektu v pam∞ti. PotΘ
chvφli vyΦkejte a sledujte titulkov² pruh okna aplikace, ve kterΘm se budou
zobrazovat informace o poΦtu instancφ, kterΘ se jeÜt∞ nachßzejφ v pam∞ti. Po
uplynutφ jistΘho ΦasovΘho okam₧iku (m∙₧e jφt i o n∞kolik minut) by m∞l poΦet
instancφ klesnout na nulu, co₧ je d∙kazem toho, ₧e Garbage Collection odvßdφ svou prßci sv∞domit∞ (obr. 7). ááááá
Obr. 7 û Konec prßce Garbage
Collection a nulov² poΦet instancφ objektu v pam∞ti
Jßn Hanßk