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