|
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