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ß°

PlynulΘ zmiznutφ formulß°e

Modifikace souboru AssemblyInfo.vb

P°idßnφ nabφdky a polo₧ky za b∞hu programu

Ukßzka prßce Garbage Collection

 

 

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

 

Zp∞t na obsah

 

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

 

Zp∞t na obsah

 

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:

 

  1. V okn∞ Pr∙zkumnφka °eÜenφ (Solution Explorer) klepn∞te prav²m tlaΦφtkem myÜi na polo₧ku AssemblyInfo.vb.
  2. Z kontextovΘ nabφdky vyberte p°φkaz View Code, na co₧ se obsah souboru otev°e v editoru.
  3. Upravte hodnoty atribut∙ AssemblyTitle a AssemblyCompany (obr. 3).

 

 

Obr. 3 û Modifikovan² soubor AssemblyInfo.vb

 

  1. Prove∩te sestavenφ aplikace a podφvejte se do slo₧ky s vygenerovanou assembly. Pou₧ijete-li pohled Titles, podoba ikony aplikace by m∞la zodpovφdat tΘ z obr. 4.á

 

 

Obr. 4 û V²slednφ podoba ikony aplikace

 

Zp∞t na obsah

 

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φ:

 

  1. Zalo₧te nov² projekt typu Windows Application.
  2. Na formulß° p°idejte instanci ovlßdacφho prvku Button.
  3. Na vytvo°enou instanci poklepejte, Φφm₧ se vßm otev°e okno pro zßpis programovΘho k≤du, do kterΘho zapiÜte tento k≤d:

 

 

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

áá

  1. Do editoru k≤du vlo₧te zßpis pro proceduru Zobrazit_zpravu:

 

ááá 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ß°

 

Zp∞t na obsah

 

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:

 

  1. Vytvo°te nov² projekt typu Windows Application.
  2. P°idejte do projektu modul t°φdy (Class1.vb).
  3. Upravte k≤d v modulu t°φdy do tΘto podoby:

 

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

 

  1. Na formulß° p°idejte instanci ovlßdacφho prvku Button a instanci ovlßdacφho prvku Timer.
  2. Hodnotu vlastnosti Enabled prvku Timer nastavte na True a do vlastnosti Interval zadejte hodnotu 50.
  3. Obsluhu udßlosti Click prvku Button vypl≥te nßsledujφcφm programov²m k≤dem:

 

áááááá Dim x As Integer, obj

áááááá For x = 1 To 5000

áááááááááá obj = New Objekt_01()

áááááá Next x

 

  1. Obsluhu udßlosti Tick prvku Timer modifikujte nßsledujφcφm zp∙sobem:

 

Me.Text = "PoΦet instancφ objektu v pam∞ti: " & Objekt_01.Instance_objektu

 

  1. Prove∩te sestavenφ projektu a spus¥te jej.

 

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

 

Zp∞t na obsah

 

 

Jßn Hanßk