|
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#
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í:
|
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. |
Obr. 1 – Průvodce tvorbou
třídy C# Class Wizard
Obr. 2 – Zadání jména pro
vytvářenou třídu
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ů:
|
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:
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í:
·
Microsoft Office 10.0 Object Library
·
Microsoft Word 10.0 Object Library
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