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