Dobrodružství v C#

Jak odkrýt zákoutí jazyka C#

Časová náročnost (min):

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 C# .NET 2002

Žádný

Žádný

 

 

 

Obsah

Obtížnost

Čas (min)

 Vytváříme první třídu v C#

* Zobrazení hlavní nabídky HTML nápovědy pomocí třídy Help

* Automatizace pomocníka Office z aplikace Microsoft Word

 

 

Vytváříme první třídu v C#

 

Jestliže patříte mezi začátečníky v C#, zcela jistě uvítáte tento tip, ve kterém si ukážeme, jak rychle a jednoduše sestrojit první třídu. Jestliže jste ještě nikdy nepřišli do kontaktu s koncepcí objektově orientovaného programování (OOP), budeme si nejprve muset ozřejmit několik zásad a terminologických pojmů. Koncepce OOP na programování aplikací nahlíží ze zcela jiného pohledu, než tomu bylo u procedurálního programování. Aplikace v ponětí procedurálního programování představovala kolekci funkcí, které mezi sebou komunikovaly, přičemž jedna funkce měla výsostní postavení, protože byla vstupním bodem aplikace. Tato vstupní funkce byla volána jako první ihned poté, co byly data souboru aplikace načteny do paměti počítače. Skupinu procedurálních programovacích jazyků tvoří mnoho, dnes již jistě legendárních, zástupců. Ze všech vzpomeňme například jazyk C, Basic a Pascal. Postupem času se ovšem zjistilo, že procedurální programování není příliš vhodné na řešení problémů reálného světa. Tato myšlenka vychází ze skutečnosti, podle které by počítače měly především modelovat a řešit skutečné problémy. Jednoduše řečeno, v počítačích by se měly nacházet virtuální reprezentace předmětů, neboli objektů, které můžete najít ve skutečném světě. Tak byl položen základní kámen nové etapy programování, která nese označení objektově orientované programování (OOP).  

 

Po poněkud všeobecnější úvodní části se můžeme na OOP podívat blíže. Pro vás, jako začátečníky, je velmi důležité, abyste pochopili základní pojmy objektově orientovaného programování, kterými jsou třída a objekt. Třídu si můžete představit jako šablonu pro tvorbu objektů, neboli instancí dané třídy. Třída přesně definuje, jak má objekt vypadat a jak se má chovat. Objekt je tedy samostatní aplikačně-logickou jednotkou, která jakmile je vytvořena, může operovat nezávisle na třídě. Každý objekt má své vlastnosti a metody. Metody a vlastnosti jsou speciální programátorské konstrukce, pomocí kterých lze ovlivnit chování, nebo charakteristiky objektu. Pokud zavoláme metodu objektu, objekt něco provede (např. nadváže komunikaci s jiným objektem, spustí aplikaci, nebo vypočte diferenciální rovnici). Prostřednictvím vlastností objektu můžeme ovlivňovat jisté charakteristiky objektu. Budeme-li mít objekt, jenž bude reprezentovat automobil, můžeme nastavit několik vlastností, mezi které by mohly patřit třeba výkon motoru, spotřeba paliva na sto kilometrů, či počet dveří. Uvedenému objektu bychom mohli implementovat metody pro nastartování, zařazení rychlostního stupně a podobně. Na následujících řádcích se dozvíte, jak snadno zhotovit jednoduchou třídu v C#. Postupujte podle těchto instrukcí:

 

  1. Spusťte Visual C# .NET a vytvořte standardní aplikaci pro Windows (Windows Application). To provedete takto:

 

  1. Zaměřte se na dialogové okno Class View. Toto okno by se mělo nacházet v pravém horním rohu okna integrovaného vývojového prostředí (IDE) Visual C# .NET. Okno Class View sdílí jeden rámeček s dalšími okny, např. s oknem Solution Explorer. Chcete-li zobrazit okno Class View, klepněte na záložku se stejným názvem.

 

Jestliže okno Class View nevidíte, zvolte nabídku View a klepněte na položku Class View. Podobného účinku docílíte použitím implementované klávesové zkratky CTRL+SHIFT+C.

 

  1. V dialogovém okně Class View klepněte na název vašeho projektu pravým tlačítkem myši.
  2. Objeví se kontextová nabídka.
  3. Ukažte na položku Add a posléze aktivujte položku Add Class.
  4. Uvidíte dialogové okno průvodce sestrojením třídy s názvem C# Class Wizard (obr. 1).

 

 

Obr. 1 – Průvodce tvorbou třídy C# Class Wizard

 

  1. Průvodce tvorbou třídy vám pomůže velmi snadným způsobem vytvořit vaší první třídu. V panelu nalevo jsou umístěné tři položky: Class Options, Base Class a Inheritance. Nás bude v této chvíli zajímat pouze první z nich, Class Options, která je implicitně aktivovaná. Položka Class Option zpřístupňuje základní volby, podle nichž bude vytvořena nová třída. Mezi tyto volby patří:
  1. Abyste vytvořili jednoduchou třídu, zcela postačí, když vyplníte textové pole Class Name a stiskněte tlačítko Finish (obr. 2). Ano, tak jednoduché to je.

 

 

Obr. 2 – Zadání jména pro vytvářenou třídu

 

  1. Podíváte-li se do okna Solution Explorer, uvidíte, že průvodce přidal do projektu kód se souborem třídy a obsah tohoto souboru vám otevřel v okně editoru pro zápis programového kódu. Obsah souboru s třídou by měl vypadat asi takto:

 

using System;

 

namespace PrvníTřída

{

   /// <summary>

   ///

   /// </summary>

   public class MojeTřída

   {

         public MojeTřída()

         {

               //

               // TODO: Add constructor logic here

               //

         }

   }

}

 

V této ukázce je vytvořen jmenný prostor PrvníTřída a v tomto jmenném prostoru je uložen kód třídy s názvem MojeTřída. Deklarační příkaz třídy tvoří modifikátor přístupu public, který povoluje nijak neomezený přístup k třídě a klíčové slovo class. Aby kompilátor věděl, že chceme vytvořit třídu, je nezbytné, aby deklarační příkaz třídy disponoval vhodným modifikátorem přístupu a klíčovým slovem class, za kterým následuje jméno třídy. Tělo třídy tvoří veškerý programový kód, jenž se nachází mezi otevírací ({) a uzavírací (}) složenou závorkou třídy. V našem případě je tělo třídy tvořeno jenom jedinou metodou, tzv. konstruktorem. Konstruktor má tuto podobu:

 

 public MojeTřída()

{

    //

    // TODO: Add constructor logic here

    //

}

 

Konstruktor třídy je speciální metoda, která je aktivována vždy poté, co je vytvořena instance třídy.

 

Je velmi důležité, abyste věděli, že konstruktor má stejné jméno jako samotná třída. V našem případě se třída jmenuje MojeTřída, a proto i konstruktor je pojmenován jako MojeTřída. Podle tohoto jednoduchého, ovšem důležitého pravidla budete vždy schopni určit, která metoda třídy představuje její konstruktor.

 

Ona speciálnost konstruktoru tkví v tom, že ačkoliv jde o metodu, tato nemůže disponovat žádnou návratovou hodnotou, dokonce v deklaračním příkazu nemůže být použito ani klíčové slovo void. Na druhé straně, konstruktor může pracovat s jedním, nebo i několika parametry (můžete tak vytvořit parametrický konstruktor). Jedna třída může mít jeden, nebo i několik konstruktorů. V tomto případě musí mít konstruktory stejný název, ovšem je nezbytně nutné, aby se odlišovaly seznamem parametrů. Obsahuje-li třída více než jeden konstruktor, který vyhovuje již uvedeným požadavkům, jde o tzv. přetížený konstruktor. Do takových dálav se ovšem v tomto tipu pouštět nebudeme. Místo toho umístíme do konstruktoru kód pro zobrazení dialogového okna se zprávou. Upravte kód třídy následovně:

 

using System;

using System.Windows.Forms;

 

namespace PrvníTřída

{

   /// <summary>

   ///

   /// </summary>

   public class MojeTřída

   {

         public MojeTřída()

         {

              MessageBox.Show("Byl vytvořen objekt.","Zpráva konstruktoru");

         }

   }

}

 

Pro zobrazení okna se zprávou použijeme metodu Show třídy MessageBox. Abychom nemuseli zadávat plně kvalifikované jméno metody pozůstávající z názvu jmenného prostoru, třídy a metody (System.Windows.Forms.MessageBox.Show), přidáme do kódu direktivu using. Direktiva using zabezpečí import požadovaného cílového jmenného prostoru. Na formulář přidejte jedno tlačítko (instanci ovládacího prvku Button) a poklepte na něj. Událostní proceduru Click tlačítka upravte následovně:

 

private void button1_Click(object sender, System.EventArgs e)

{

   MojeTřída objekt = new MojeTřída();

}

 

Uvedený řádek zdrojového kódu vytváří instanci (objekt) třídy MojeTřída. Klíčové slovo new zde vystupuje v roli operátoru, který zabezpečí vytvoření nového objektu. Přeložíte-li aplikaci a spustíte ji, uvidíte, že po klepnutí na tlačítko se objeví dialog se zprávou (to tedy znamená, že byl proveden kód konstruktoru objektu). Situaci přibližuje obr. 3.

 

 

Obr. 3 – Zpráva o vytvoření objektu

 

 

Zobrazení hlavní nabídky HTML nápovědy pomocí třídy Help

 

Jestliže dnes aplikace neobsahuje pořádnou nápovědu, nejde o aplikaci v pravém slova smyslu. Správná a konkurence schopná aplikace v dnešních časech již systém nápovědy obsahovat musí, a to z několika pádných důvodů:

 

  1. Nápověda poskytuje uživatelům informace o aplikaci, přičemž je kladen důraz na snadné a rychlé pochopení jak grafického rozhraní aplikace, tak i na bezproblémové zvládnutí aplikační logiky.
  2. Pokud uživatelé narazí na nějaký problém při řešení jistých operací, je to právě nápověda, na kterou se obracejí se žádostí o pomoc.
  3. Aplikace, která obsahuje nápovědu, působí daleko kompaktnějším dojmem jako aplikace, která nápovědou nedisponuje.

 

V této souvislosti je nutno poznamenat, že proces vytváření systémů nápovědy je v současnosti již tak náročnou a zdlouhavou záležitostí, že v některých případech je tvorba nápovědy komplikovanější nežli tvorba samotné aplikace.

 

V rámci Visual C# .NET můžete pracovat se třemi typy nápovědy:

 

  1. Nápověda stylu WinHelp 4.0
  2. HTML nápověda
  3. Nová generace nápovědy, zatím pod pracovním názvem MS Help 2.0

 

V tomto dobrodružství se zaměříme pouze na druhou možnost, tedy na HTML nápovědu. .NET Framework nabízí vývojářům vestavěnou třídu Help, která zapouzdřuje funkcionalitu HTML nápovědy verze 1.0. Třída Help je uložena ve jmenném prostoru System.Windows.Forms. Zajímavé je, že nelze přímo vytvářet instance této třídy, místo toho je nutné zavolat statické metody třídy ShowHelp a ShowHelpIndex:

 

private void button2_Click(object sender, System.EventArgs e)

{

Help.ShowHelp(this, "windows.chm");

}

 

Pokud použijete uvedený fragment kódu na počítači s operačním systémem Windows 2000, bude zobrazeno dialogové okno systému nápovědy pro tento operační systém (obr. 4).

 

 

Obr. 4 – Použití statické metody ShowHelp třídy Help

 

Generická podoba statické metody ShowHelp je v našem případě následovní:

 

public static void ShowHelp(

   Control parent,

   string url

);

 

První parametr, parent, obsahuje odkaz na instanci, která si vyžádala spuštění nápovědy. My první parametr naplňujeme klíčovým slovem this, což znamená, že iniciátorem spuštění nápovědy bude aktuální instance třídy Form1. Druhý parametr, url, představuje URL k souboru s nápovědou. URL může směrovat na lokální soubor s nápovědou (např. "c:\Nápověda.chm"), nebo na vzdálený soubor s nápovědou (např. "http://www.abc.cz/Nápověda.chm").  

   

Budete-li chtít, aby se ihned po otevření nápovědy explicitně zobrazil třeba rejstřík klíčových slov, zavolejte statickou metodu ShowHelpIndex:

 

private void button2_Click(object sender, System.EventArgs e)

{

    Help.ShowHelpIndex(this, "windows.chm");

}

 

 

Automatizace pomocníka Office z aplikace Microsoft Word

 

V závěrečném dobrodružství si ukážeme, jak z prostředí jazyka C# vytvořit instanci aplikace Microsoft Word a z této aplikace zobrazit a ovládat pomocníka Office. Postupujte podle těchto instrukcí:

 

  1. Spusťte Visual C# .NET a vytvořte novou aplikaci pro Windows (Windows Application).
  2. V dialogovém okně Solution Explorer klepněte na položku References pravým tlačítkem myši a z kontextové nabídky vyberte položku Add Reference.
  3. V dialogu Add Reference klepněte na záložku COM a vyhledejte a přidejte do projektu následující objektové knihovny:

·          Microsoft Office 10.0 Object Library

·          Microsoft Word 10.0 Object Library

  1. Na formulář umístěte jednu instanci ovládacího prvku Button a její událostní proceduru Click upravte takto:

 

         private void button1_Click(object sender, System.EventArgs e)

{

//Vytvoření nového objektu třídy Word.ApplicationClass, jenž

//představuje novou instanci aplikace Word.

Word.ApplicationClass obj_Word = new Word.ApplicationClass();

 

//Maximalizace okna aplikace Word.

obj_Word.WindowState = Word.WdWindowState.wdWindowStateMaximize;

 

//Zviditelnění okna aplikace Word.

obj_Word.Visible = true;

 

//Aktivace okna aplikace Word (okno získá zaměrění).

obj_Word.Activate();

 

//Vytvoření objektové proměnné obj_Assistant a její naplnění

//referencí na objekt obj_Word.Application.Assistant.

Microsoft.Office.Core.Assistant

            obj_Assistant = obj_Word.Application.Assistant;

 

//Deklarace booleovské proměnné bAssistant.

//V této proměnné bude uložena hodnota, která indikuje

//stav vlastnosti On objektu Assistant. Tuto hodnotu použijeme

//později, při ukončení aplikace, abychom uvedli pomocníka

//Office do původního stavu.

bool bAssistant = obj_Assistant.On;

 

//Pokud je vlastnost On objektu Assistant nastavena

//na hodnotu True, znamená to, že pomocník Office

//je aktivovaný. Abychom pomocníka zobrazili, nastavíme pouze

//vlastnost Visible na hodnotu True.

//Jestliže je vlastnost On objektu Assistant rovna hodnotě False,

//pomocník Office není aktivní. V tomto případě nastavíme

//vlastnost On na hodnotu True, čímž pomocníka Office

//aktivujeme a zviditelníme.

if (obj_Assistant.On == true)

      obj_Assistant.Visible = true;

else

      obj_Assistant.On = true;

 

//Umístění pomocníka Office do středu obrazovky.

obj_Assistant.Top =

      (Screen.PrimaryScreen.Bounds.Height - 128) / 2;

obj_Assistant.Left =

      (Screen.PrimaryScreen.Bounds.Width - 128) / 2;

 

//Přehrání několika animací při pravidelném uspání

//aktuálního vlákna statickou metodou Sleep třídy

//System.Threading.Thread.

obj_Assistant.Animation =

      Microsoft.Office.Core.MsoAnimationType.msoAnimationListensToComputer;

System.Threading.Thread.Sleep(5000);

obj_Assistant.Animation =

      Microsoft.Office.Core.MsoAnimationType.msoAnimationThinking;

System.Threading.Thread.Sleep(5000);

obj_Assistant.Animation =                      Microsoft.Office.Core.MsoAnimationType.msoAnimationWorkingAtSomething;

System.Threading.Thread.Sleep(5000);

 

//Nastavení vlastnosti On objektu Assistant do původního

//stavu, tedy do stavu, v jakém se nacházel před spuštěním

//naší programové ukázky.

obj_Assistant.On = bAssistant;

 

//Deklarace objektových proměnných a, b, c.

object a, b, c;

a = Word.WdSaveOptions.wdDoNotSaveChanges;

b = Word.WdOriginalFormat.wdWordDocument;

c = false;

 

//Ukončení instance aplikace Word pomocí metody Quit.

obj_Word.Quit(

                  ref a,

                  ref b,

                  ref c

      );

}

 

Po spuštění aplikace budete vidět pomocníka Office v akci (obr. 5).

 

 

Obr. 5 – Automatizace pomocníka Office z jazyka C#

 

 

Ján Hanák