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 SP4

Visual C# .NET 2003

Äßdn²

Äßdn²

 

 

 

Obsah

Obtφ₧nost

╚as (min)

áP°idßvßnφ instancφ ovlßdacφch prvk∙ na formulß° za b∞hu aplikace

*áP°ekrytφ metody OnPaint formulß°e

*áStrukturovanß sprßva chyb v praxi

*áVolßnφ metody bßzovΘ t°φdy z odvozenΘ t°φdy

 

 

P°idßvßnφ instancφ ovlßdacφch prvk∙ na formulß° za b∞hu aplikace

 

IntegrovanΘ prost°edφ jazyka C# nabφzφ, podobn∞ jako i dalÜφ programovacφ nßstroje Visual Studia .NET, vizußlnφ nßvrhß°, pomocφ kterΘho si m∙₧ete podobu vyvφjenΘ aplikace upravit podle sv²ch pot°eb. Zcela jist∞ se shodneme na tom, ₧e p°φtomnost vizußlnφho nßvrhß°e je velice praktick²m prvkem integrovanΘho prost°edφ, ovÜem lze jej pou₧φt jenom v rßmci re₧imu nßvrhu aplikace. Pokud ovÜem budete chtφt p°idßvat na plochu formulß°e instance ovlßdacφch prvk∙ p°φmo za b∞hu programu, budete se muset p°iklonit k psanφ programovΘho k≤du. Jeliko₧ je p°idßvßnφ a pota₧mo i odstra≥ovßnφ instancφ ovlßdacφch prvk∙ z formulß°e aplikace docela b∞₧nou zßle₧itostφ, vysv∞tlφme si, jak tuto ·lohu splnit nejrychlejÜφm mo₧n²m zp∙sobem. Postupujte takto:

 

  1. Spus¥te Visual C# .NET 2003 a vytvo°te standardnφ aplikaci pro Windows (Windows Application).
  2. Na plochu formulß°e umφst∞te jednu instanci ovlßdacφho prvku Button, kterou nechte implicitn∞ pojmenovanou (button1).
  3. Poklepejte na p°idanou instanci prvku Button, Φφm₧ na°φdφte vytvo°enφ kostry zpracovatele udßlosti Click tΘto instance. Podobu zpracovatele udßlosti button1_Click upravte takto:

 

ááááááááááá //Po aktivaci metody bude na stßvajφcφ formulß° p°idßna

ááááááááááá //instance ovlßdacφho prvku Button.

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

ááááááááááá {

ááááááááááááááááá //Vytvo°enφ instance t°φdy Button a ulo₧enφ odkazu

ááááááááááááááááá //na vzniklou instanci do referenΦnφ prom∞nnΘ TlaΦφtko_01

ááááááááááááááááá Button TlaΦφtko_01 = new Button();

 

ááááááááááááááááá //Nastavenφ nßv∞stφ vytvo°enΘ instance t°φdy Button.

ááááááááááááááááá TlaΦφtko_01.Text = "Spustit aplikaci";

 

ááááááááááááááááá //Nastavenφ velikosti (Üφ°ky a v²Üky) vytvo°enΘ instance

ááááááááááááááááá //t°φdy Button.

ááááááááááááááááá TlaΦφtko_01.Size = new Size(100, 50);

 

ááááááááááááááááá //UrΦenφ pozice (x, y) levΘho hornφho rohu vytvo°enΘ instance

ááááááááááááááááá //t°φdy Button (Pozice instance ovlßdacφho prvku je urΦenß

ááááááááááááááááá //relativn∞ ve vztahu k formulß°i).

ááááááááááááááááá TlaΦφtko_01.Location = new Point(10, 125);

 

ááááááááááááááááá //P°idßnφ vytvo°enΘ instance t°φdy Button do kolekce

ááááááááááááááááá //ovlßdacφch prvk∙ formulß°e. Za tφmto ·Φelem pou₧ijeme

ááááááááááááááááá //metodu Add t°φdy System.Windows.Forms.Control.ControlCollection.

 

ááááááááááááááááá this.Controls.Add(TlaΦφtko_01);

ááááááááááá }

 

Novou instanci ovlßdacφho prvku, resp. t°φdy Button provedeme pomocφ p°i°azovacφho p°φkazu a operßtoru new. Pomineme-li modifikaci r∙zn²ch vlastnostφ vytvo°enΘ instance, dojdeme k zßv∞ru, ₧e veÜkerou prßci pot°ebnou pro p°idßnφ novΘ instance na formulß°, realizuje finßlnφ °ßdek programovΘho k≤du:

 

 

ááááá ááááá this.Controls.Add(TlaΦφtko_01);

áá

KlφΦovΘ slovo this p°edstavuje aktußlnφ instanci formulß°e, p°esn∞ji °eΦeno aktußlnφ instanci t°φdy Form1. P°φstup ke vÜem instancφm ovlßdacφch prvk∙, kterΘ se na formulß°i nachßzejφ, poskytuje kolekce instancφ s nßzvem Controls. Pou₧ijeme-li metodu Add s nßzvem instance, kterou chceme p°idat na plochu aktivnφho formulß°e, bude tato instance p°idßna prßv∞ do kolekce instancφ Controls. P°ipome≥me, ₧e p°idßnφ instance do kolekce Controls tuto instanci na formulß°i takΘ zviditelnφ (nenφ tedy nutnΘ dodateΦn∞ nastavovat vlastnosti Visible vytvo°enΘ instance na hodnotu True).

 

  1. Spus¥te aplikaci (klßvesa F5) a klepn∞te na instanci ovlßdacφho prvku Button, kterou jste na formulß° p°idali v dob∞ nßvrhu. Pracuje-li programov² k≤d, jen₧ je umφst∞n ve zpracovateli udßlosti button1_Click sprßvn∞, m∞lo by se na ploÜe formulß°e objevit dalÜφ tlaΦφtko s nßpisem Spustit aplikaci. V²born∞, dokßzali jste p°idat na formulß° tlaΦφtko za b∞hu programu. Pokud ovÜem klepnete na toto tlaΦφtko, nic se nestane. Je to proto, ₧e udßlost Click vytvo°enΘ instance nenφ asociovßna se ₧ßdn²m smyslupln²m zpracovatelem. Budete-li chtφt, aby se po klepnutφ na instanci spustila skuteΦnß aplikace, vlo₧te za poslednφ °ßdek zpracovatele udßlosti button1_Click tento °ßdek zdrojovΘho k≤du (komentß°e m∙₧ete samoz°ejm∞ vynechat):

 

ááááááááááá //Vytvo°enφ asociace mezi udßlostφ Click vytvo°enΘ instance

ááááááááááá //t°φdy Button a jejφm zpracovatelem.

ááááááááááá TlaΦφtko_01.Click +=new EventHandler(TlaΦφtko_01_Click);

 

  1. Ve verzi 2003 vßm C# nabφdne mo₧nost vytvo°it asociaci mezi udßlostφ a jejφm zpracovatelem velmi intuitivnφm zp∙sobem (v zßsad∞ staΦφ jenom potvrdit vytvo°enφ asociace klßvesou Tab). V rßmci druhΘ aktivace klßvesy Tab bude pro vßs dokonce vytvo°ena takΘ programovß kostra zpracovatele udßlosti TlaΦφtko_01_Click. K≤d zpracovatele tΘto udßlosti modifikujte takto:

 

ááááááááááá //Programovß konstrukce zpracovatele udßlosti TlaΦφtko_01_Click

ááááááááááá private void TlaΦφtko_01_Click(object sender, EventArgs e)

ááááááááááá {

ááááááááááááááááá //Vytvo°enφ instance t°φdy Process, kterß se nachßzφ v jmennΘm

ááááááááááááááááá //prostoru System.Diagnostics.

ááááááááááááááááá System.Diagnostics.Process Aplikace_01 =

ááááááááááááááááááááááá new System.Diagnostics.Process();

ááááááááááááááááá

ááááááááááááááááá //Specifikace nßzvu aplikace, kterou budeme chtφt spustit.

ááááááááááááááááá //Za tφmto ·Φelem pou₧ijeme vlastnost FileName.

ááááááááááááááááá Aplikace_01.StartInfo.FileName = "Notepad";

 

ááááááááááááááááá //Zavolßnφm metody Start spustφme vybranou aplikaci.

ááááááááááááááááá Aplikace_01.Start();

ááááááááááá }

 

á

Zp∞t na obsah

 

P°ekrytφ metody OnPaint formulß°e

 

Metoda OnPaint reaguje na udßlost Paint, ke kterΘ dojde v₧dy v okam₧iku p°ekreslenφ formulß°e. Pokud p°ekryjeme metodu OnPaint formulß°e, budeme moci zajistit, aby se p°i ka₧dΘm p°ekreslenφ plochy formulß°e uskuteΦnil jist² fragment programovΘho k≤du. AΦkoliv lze do p°ekrytΘ metody OnPaint umφstit jakΘkoliv platnΘ programovΘ instrukce, nejΦast∞ji se t∞lo tΘto p°ekrytΘ metody pou₧φvß pro modifikaci grafickΘ reprezentace formulß°e jako takovΘho. Jak jist∞ vφte, implicitn∞ je barva pozadφ formulß°e Üedß, ovÜem pokud p°ekryjeme metodu OnPaint tohoto formulß°e, m∙₧eme sami urΦit, jakou barvu pozadφ mß formulß° mφt.

 

Pro p°ekrytφ metody OnPaint formulß°e Form1 ud∞lejte nßsledovnφ:

 

  1. Spus¥te Visual C# .NET 2003 a vytvo°te standardnφ aplikaci pro Windows (Windows Application).
  2. Vyberte nabφdku View a klepn∞te na polo₧ku Class View. Okam₧it∞ se zviditelnφ dialogovΘ okno Class View.

 

Tip

DialogovΘ okno Class View m∙₧ete zobrazit i prost°ednictvφm klßvesovΘ zkratky CTRL+SHIFT+C. Okno Class View sdφlφ spoleΦn² region s dalÜφmi okny (nap°. Solution Explorer Φi Resource View).á

 

  1. Rozbalujte postupn∞ jednotlivΘ polo₧ky stromovΘ struktury jmenn²ch prostor∙ a t°φd:

 

          Nßzev projektu

          Nßzev jmennΘho prostoru

          Form1

          Bases and Interfaces

          Form

 

  1. Vyhledejte polo₧ku s nßzvem OnPaint a klepn∞te na nφ prav²m tlaΦφtkem myÜi.
  2. Z kontextovΘ nabφdky vyberte polo₧ku Add a poslΘze klikn∞te na polo₧ku Override (obr. 1).

 

 

Obr. 1 û Proces p°ekrytφ metody OnPaint formulß°e

 

  1. C# vytvo°φ programovou kostru p°ekrytΘ varianty metody OnPaint:

 

ááááááááááá protected override void OnPaint(PaintEventArgs e)

ááááááááááá {

ááááááááááááááááá // TODO:á Add Form1.OnPaint implementation

ááááááááááááááááá base.OnPaint (e);

ááááááááááá }

 

  1. Pro zm∞nu barvy pozadφ formulß°e modifikujte p°ekrytou metodu OnPaint nßsledovn∞:

 

ááááááááááá protected override void OnPaint(PaintEventArgs e)

ááááááááááá {

ááááááááááááááááá //Vytvo°enφ novΘ instance struktury System.Drawing.Rectangle.

ááááááááááááááááá Rectangle GObdΘlnφk = new Rectangle(new Point(0, 0),

ááááááááááááááááááááááá new Size(this.Width, this.Height));

 

ááááááááááááááááá //Vytvo°enφ novΘho grafickΘho Üt∞tce, kter² je sestaven

ááááááááááááááááá //ze t°φdy LinearGradientBrush.

ááááááááááááááááá LinearGradientBrush Gèt∞tec = new LinearGradientBrush(GObdΘlnφk,

ááááááááááááááááááááááá Color.Red, Color.Orange, LinearGradientMode.ForwardDiagonal);

ááááááááááááááááá

ááááááááááááááááá //Deklarace referenΦnφ prom∞nnΘ GObjekt, do kterΘ je ulo₧en

ááááááááááááááááá //odkaz na objekt Graphics, jen₧ p°edstavuje plochu, na kterou

ááááááááááááááááá //se bude kreslit. V naÜem p°φpad∞ jde o plochu aktußlnφ instance

ááááááááááááááááá //t°φdy Form1.

ááááááááááááááááá Graphics GObjekt = e.Graphics;

 

ááááááááááááááááá //Aplikace metody FillRectangle, kterß mß na starosti prßce

ááááááááááááááááá //spojenΘ s vypln∞nφm plochy aktußlnφ instance t°φdy Form1

ááááááááááááááááá //gradientnφ v²plnφ.

ááááááááááááááááá GObjekt.FillRectangle(Gèt∞tec, GObdΘlnφk);

ááááááááááááááááá

ááááááááááááááááá //Uvoln∞nφ zdroj∙, kterΘ byly alokovßny p°φsluÜn²mi grafick²mi

ááááááááááááááááá //objekty.

ááááááááááááááááá GObjekt.Dispose();

ááááááááááááááááá Gèt∞tec.Dispose();

 

ááááááááááááááááá //Volßnφ metody OnPaint bßzovΘ t°φdy. Bßzovou t°φdou

ááááááááááááááááá //je t°φda Control.

ááááááááááááááááá base.OnPaint (e);

ááááááááááá }

 

 

  1. Jestli₧e spustφte aplikaci, uvidφte, ₧e barva pozadφ formulß°e je opravdu jinß (obr. 2).

 

 

Obr. 2 û Zm∞na barvy pozadφ formulß°e pomocφ p°ekrytφ metody OnPaint

 

á

Zp∞t na obsah

 

Strukturovanß sprßva chyb v praxi

 

Pro mnoho programßtor∙ p°edstavuje problematika sprßvy a oÜet°ovßnφ chyb v jejich programech tΘma, kterΘ by vystaΦilo na opravdu dlouhou diskusi. Je nepopiratelnΘ, ₧e chyby se v softwarov²ch aplikacφch vyskytovaly, vyskytujφ a s velikou pravd∞podobnostφ se takΘ vyskytovat budou v i budoucφch etapßch v²voje programovßnφ. P°esto₧e je tato teze ryzφ skuteΦnostφ, snad na vÜech frontech se objevujφ zßstupy programßtor∙, kte°φ se pouÜt∞jφ do boje s virtußlnφmi chybami. Cφl je jasn²: Snφ₧it poΦet objeviteln²ch chyb na takovou mφru, kterß by byla p°φnosnß, a to jak pro programßtora, tak pro samotnΘho finßlnφho u₧ivatele. AΦkoliv nemßme v tuto chvφli dostateΦn² prostor na podrobnou charakteristiku filozofie chyb, jejich klasifikaci a specifikaci, ukß₧eme si, jakΘ novΘ zbran∞ pro boj s poΦφtaΦov²mi Üt∞nicemi nabφzφ platforma .NET Framework a pota₧mo i jazyk C#.

 

Zaklφnadlem dneÜnφch dn∙ se v rßmci programovßnφ na .NET ·rovni stßvß takzvanß strukturovanß sprßva chyb. Ihned ze zaΦßtku je zapot°ebφ zmφnit skuteΦnost, ₧e sprßva chyb je unifikovanß a peΦliv∞ implementovanß do vÜech programovacφch jazyk∙ pro prost°edφ .NET Framework. Tedy nejenom C#, ale takΘ Visual Basic .NET, Visual J# a °φzenΘ C++ obsahujφ mechanizmy, kterΘ dovolujφ relativn∞ snadnΘ a souΦasn∞ flexibilnφ äodchytßvßnφô chyb v softwarov²ch aplikacφch. SpoleΦnß chybovß politika nabφrß na v²znamu zejmΘna p°i programovßnφ ve vφce programovacφch jazycφch: Je nap°φklad mo₧nΘ generovat chybovou v²jimku z aplikace napsanΘ v C# a poslΘze äzachytitô tuto v²jimku t°eba v °φzenΘm C++ nebo ve Visual Basicu .NET.

 

Po formßlnφ strßnce je strukturovanß sprßva chyb v C# prezentovßna programovou konstrukcφ try-catch-finally. Obecn∞ lze p°i prßci s chybami postupovat pomocφ nßsledujφcφ struktury:

 

  1. Nejprve je nutnΘ identifikovat tu partii programovΘho k≤du, v nφ₧ by mohlo s nejv∞tÜφ pravd∞podobnostφ dojφt k chyb∞.
  2. VÜechen potencißln∞ nebezpeΦn² k≤d umφstφme do specißlnφho bloku try. To znamenß, ₧e v bloku try se bude nachßzet k≤d, o n∞m₧ p°edpoklßdßme, ₧e v n∞m m∙₧e dojφt k chyb∞. Nastane-li v bloku try chyba, bude C# generovat v²jimku. V²jimka p°edstavuje entitu, pomocφ kterΘ program signalizuje, ₧e v n∞kterΘ jeho Φßsti doÜlo k neΦekanΘ, resp. chybovΘ situaci. ááá
  3. Vygenerovanou v²jimku m∙₧eme zpracovat v bloku catch. Ve skuteΦnosti nenφ nutnΘ, aby programßto°i pracovali jenom s jednφm blokem catch, proto₧e blok∙ tohoto typu lze vytvo°it hned n∞kolik.

 

Poznßmka

PoΦet blok∙ catch vÜak zvyΦejn∞ zßvisφ od stylu, jak²m programßtor p°istupuje k procesu oÜet°ovßnφ chyb. Tudφ₧ lze vytvo°it jenom jeden generick² blok catch a vÜechny chybovΘ v²jimky, kterΘ budou generovßny, zpracovßvat podle jednotnΘho scΘnß°e v rßmci jednoho bloku catch. V praxi se ovÜem urΦit∞ Φast∞ji st°etnete s p°φtomnostφ v∞tÜφho poΦtu catch blok∙. V tomto p°φpad∞ m∙₧e ka₧d² blok zachytßvat jenom specifick² typ chybov²ch v²jimek.

 

  1. KoneΦn∞, blok finally obsahuje takovΘ programovΘ instrukce, kterΘ musφ b²t realizovanΘ, a to i tehdy, nebude-li generovßna ₧ßdnß chybovß v²jimka. Blok finally je z tohoto pohledu vhodn² zejmΘna na jakΘkoliv äΦφstφcφô operace, jako je nap°φklad terminace p°φstupu k dat∙m souboru a podobn∞.

 

V nßsledujφcφ programovΘ ukßzce si p°edvedeme, jak pou₧φt strukturovanou sprßvu chyb v praxi. Vytvo°φme t°φdu, instance kterΘ budou slou₧it jako lokßlnφ prohlφ₧eΦe obrßzkov²ch soubor∙. T°φda bude obsahovat metodu ZaΦφtProhlφ₧enφ, kterΘ bude jako argument p°edßno pole textov²ch °et∞zc∙, p°edstavujφcφch cesty ke grafick²m soubor∙m, urΦen²m pro prohlφ₧enφ. Jestli₧e se na lokßlnφm pevnΘm disku nebudou nachßzet soubory s dan²m jmΘnem, dojde k vygenerovßnφ chybovΘ v²jimky. Tato v²jimka bude odchycena v p°φsluÜnΘm bloku Catch a takΘ pat°iΦn∞ oÜet°ena. Postupujte takto:

 

  1. Spus¥te Visual C# .NET 2003 a vytvo°te standardnφ aplikaci pro Windows (Windows Application).
  2. Do projektu p°idejte soubor s k≤dem t°φdy (Project à Add Class).
  3. Obsah souboru s k≤dem t°φdy upravte podle uvedenΘho vzoru (je uveden cel² v²pis k≤du, jen₧ mß b²t ulo₧en do souboru):

 

using System;

using System.Drawing;

using System.Windows.Forms;

 

namespace cs_1_04_dob_01

{

áá /// <summary>

áá /// T°φda slou₧φ pro prohlφ₧enφ grafick²ch obrßzk∙.

áá /// </summary>

áá public class Prohlφ₧eΦObrßzk∙

áá {

áááááááá public Prohlφ₧eΦObrßzk∙()

áááááááá {

áááááááááááááá //T∞lo konstruktoru.

áááááááá }

 

áááááááá //Definice metody ZaΦφtProhlφ₧enφ. VÜimn∞te si, ₧e metoda

áááááááá //pracuje s polem textov²ch °et∞zc∙.

áááááááá public void ZaΦφtProhlφ₧enφ(string[] pole)

áááááááá {

áááááááááááááá //Instantiace objekt∙ t°φd Form a PictureBox.

áááááááááááááá Form frm = new Form();

áááááááááááááá PictureBox pict = new PictureBox();

 

áááááááááááááá //ZaΦßtek strukturovanΘ sprßvy chyb je identifikovßn

áááááááááááááá //klφΦov²m slovem try, za kter²m se nachßzφ blok programovΘho

áááááááááááááá //k≤du, jen₧ je ohraniΦen slo₧en²mi zßvorkami. VeÜker² k≤d,

áááááááááááááá //kter² se nachßzφ uvnit° bloku try, je podroben strukturovanΘ

áááááááááááááá //sprßv∞ chyb. Dojde-li v k≤du v tomto bloku k chyb∞, bude

áááááááááááááá //generovßna chybovß v²jimka.

áááááááááááááá try

áááááááááááááá {

áááááááááááááááááááá frm.Size = new Size(400, 300);

áááááááááááááááááááá frm.ControlBox = false;

áááááááááááááááááááá frm.FormBorderStyle = FormBorderStyle.FixedDialog;

áááááááááááááááááááá pict.Location = new Point(0,0);

áááááááááááááááááááá pict.Size = new Size(frm.Width, frm.Height);

áááááááááááááááááááá pict.SizeMode = PictureBoxSizeMode.StretchImage;

áááááááááááááááááááá frm.Controls.Add(pict);

áááááááááááááááááááá frm.Show();

 

áááááááááááááááááááá //Obrßzky jsou naΦteny v cyklu, p°iΦem₧ u₧ivatel mß

áááááááááááááááááááá //k dispozici p°esn∞ dv∞ vte°iny, aby si obrßzek prohlΘdl.

áááááááááááááááááááá //Po uplynutφ stanovenΘho ΦasovΘho intervalu je zobrazen

áááááááááááááááááááá //dalÜφ dostupn² obrßzek.

áááááááááááááááááááá for (byte a = 0; a <= pole.GetUpperBound(0); a++)

áááááááááááááááááááá {

ááááááááááááááááááááááááá Image obr = Image.FromFile(pole[a]);

ááááááááááááááááááááááááá pict.Image = obr;

ááááááááááááááááááááááááá pict.Refresh();

ááááááááááááááááááááááááá System.Threading.Thread.Sleep(2000);

ááááááááááááááááááááááááá Application.DoEvents();

áááááááááááááááááááá }

áááááááááááááá //Konec bloku try.

áááááááááááááá }

 

áááááááááááááá //Prvnφ blok catch. Tento blok bude zapojen do Φinnosti

áááááááááááááá //v p°φpad∞, jestli₧e bude v bloku try generovßna v²jimka

áááááááááááááá //typu System.IO.FileNotFoundException. Abychom mohli vyu₧φt

áááááááááááááá //informace, kterΘ si v²jimka s sebou nese, deklarujeme

áááááááááááááá //referenΦnφ prom∞nnou x1.

áááááááááááááá catch (System.IO.FileNotFoundException x1)

áááááááááááááá {

áááááááááááááááááááá //V²jimka FileNotFoundException vznikß v okam₧iku, kdy

áááááááááááááááááááá //se na disku nenachßzφ p°φsluÜn² soubor. V tomto p°φpad∞

áááááááááááááááááááá //zobrazφme dialogovΘ okno se zprßvou, kterß bude u₧ivateli

áááááááááááááááááááá //oznamovat vzniklou chybovou situaci spoleΦn∞ s nßzvem

áááááááááááááááááááá //chyb∞jφcφho souboru.

áááááááááááááááááááá MessageBox.Show("Soubor " + x1.Message + " nebyl nalezen.",

ááááááááááááááááááááááááá "Zprßva o chyb∞ za b∞hu programu",

ááááááááááááááááááááááááá MessageBoxButtons.OK, MessageBoxIcon.Error);

áááááááááááááá }//Konec prvnφho bloku catch.

 

áááááááááááááá //Druh² blok catch. Zde budou zpracovßvßny vÜechny ostatnφ

áááááááááááááá //v²jimky, krom∞ tΘ, se kterou se pracuje v prvnφm bloku catch.

áááááááááááááá catch (System.Exception)

áááááááááááááá {

áááááááááááááááááááá //OÜet°enφ vÜech ostatnφch v²jimek, ke kter²m m∙₧e dojφt.

áááááááááááááá }//Konec druhΘho bloku catch.

 

áááááááááááááá //ZaΦßtek bloku finally. Zde vlo₧φme vÜechny p°φkazy, kter²ch

áááááááááááááá //provedenφ nenφ zßvislΘ na otßzce, zdali doÜlo k chyb∞ Φi nikoliv.

áááááááááááááá finally

áááááááááááááá {

áááááááááááááááááááá frm.Close();

áááááááááááááá }//Konec bloku finally.

áááááááá }

áá }

}

 

  1. Na formulß° p°idejte jednu instanci ovlßdacφho prvku Button a do zpracovatele udßlosti Click tΘto instance p°idejte tento programov² k≤d:

 

ááááááááááá //Vytvo°enφ novΘ instance t°φdy Prohlφ₧eΦObrßzk∙.

ááááááááááá Prohlφ₧eΦObrßzk∙ x = new Prohlφ₧eΦObrßzk∙();

ááááááááááááááááá

ááááááááááá //Deklarace pole, kterΘ m∙₧e uchovat Φty°i textovΘ °et∞zce.

ááááááááááá string[] pole_x = new string[4];

 

ááááááááááá //Napln∞nφ jednotliv²ch prvk∙ pole textov²mi °et∞zci.

ááááááááááá //Tyto °et∞zce p°edstavujφ pln∞ kvalifikovanΘ nßzvy

ááááááááááá //k cφlov²m soubor∙m s grafick²mi daty. JmΘna soubor∙ jsou

ááááááááááá //Obr1.png, Obr2.png atd., p°iΦem₧ vÜechny soubory jsou

ááááááááááá //ulo₧eny na lokßlnφm disku d.

ááááááááááá for(byte a = 0; a < 4; a++)

ááááááááááááááá pole_x[a] = "d:\\obr" + (a+1) + ".png";

 

ááááááááááá //Aktivace metody ZaΦφtProhlφ₧enφ vytvo°enΘ instance.

ááááááááááá //Metod∞ je jako argument odevzdßno pole textov²ch °et∞zc∙.

ááááááááááá x.ZaΦφtProhlφ₧enφ(pole_x);

 

á

Zp∞t na obsah

 

Volßnφ metody bßzovΘ t°φdy z odvozenΘ t°φdy

 

Aktivace metody bßzovΘ t°φdy z podt°φdy je velmi u₧iteΦnß technika, pomocφ kterΘ m∙₧ete ve vhodnΘ chvφli zavolat metodu bßzovΘ t°φdy, a to p°φmo z k≤du odvozenΘ t°φdy. Ka₧dß odvozenß t°φda m∙₧e vyu₧φvat vÜech dovednostφ, kterΘ nabφzφ jejφ bßzovß t°φda, a proto nenφ ani nejmenÜφm problΘmem aktivace p°φsluÜn²ch metod bßzovΘ t°φdy z prost°edφ odvozenΘ t°φdy. Abychom mohli zavolat metodu bßzovΘ t°φdy, pou₧ijeme v C# klφΦovΘ slovo base, za kter²m nßsleduje teΦkov² operßtor (.) a nßzev metody bßzovΘ t°φdy, kterou chceme aktivovat:

 

base.CφlovßMetodaBßzovΘT°φdy

 

Vφce informacφ p°inßÜφ nßsledujφcφ programovß ukßzka (je uveden v²pis celΘ t°φdy):

 

using System;

using System.Diagnostics;

using System.Windows.Forms;

 

namespace cs_1_04_dob_01

{

ááááá //Definice t°φdy A1.

ááááá public class A1

ááááá {áááá

ááááááááááá //Definice ve°ejnΘ virtußlnφ metody.

ááááááááááá public virtual void SpustitPoÜtovnφhoKlienta()

ááááááááááá {

ááááááááááááááááá //Aktivace metody Start t°φdy Process z jmennΘho prostoru

ááááááááááááááááá //System.Diagnostics. V²sledkem prßce metody je spuÜt∞nφ

ááááááááááááááááá //poÜtovnφho klienta.

ááááááááááááááááá Process.Start("mailto:hanja@stonline.sk");

ááááááááááá }

ááááá }

 

ááááá //Definice t°φdy B1 jako podt°φdy bßzovΘ t°φdy A1.

ááááá public class B1 : A1

ááááá {

ááááááááááá //Definice metody, kterß p°ekr²vß metodu bßzovΘ t°φdy.

ááááááááááá //Z tΘto p°ekrytΘ metody bude pomocφ klφΦovΘho slova base

ááááááááááá //volßna metoda bßzovΘ t°φdy.

ááááááááááá public override void SpustitPoÜtovnφhoKlienta()

ááááááááááá {

ááááááááááááááááá //Minimalizace aktivnφ instance t°φdy Form.

ááááááááááááááááá Form.ActiveForm.WindowState = FormWindowState.Minimized;

 

ááááááááááááááááá //Aktivace metody bßzovΘ t°φdy pomocφ klφΦovΘho slova base,

ááááááááááááááááá //teΦkovΘho operßtoru a nßzvu cφlovΘ metody.

ááááááááááááááááá base.SpustitPoÜtovnφhoKlienta();

ááááááááááá }

 

ááááá }

}

 

V²pis k≤du pracuje se dv∞ma t°φdami: A1 a B1. T°φda A1 obsahuje ve°ejnou virtußlnφ metodu SpustitPoÜtovnφhoKlienta. Je-li tato metoda aktivovßna, dochßzφ k nastartovßnφ aplikace, kterß je na cφlovΘm poΦφtaΦovΘm systΘmu nakonfigurovßna jako poÜtovnφ klient. T°φda B1 je odvozenß od t°φdy A1, p°iΦem₧ v p°ekrytΘ variant∞ metody SpustitPoÜtovnφhoKlienta je volßna metoda bßzovΘ t°φdy A1.

 

á

Zp∞t na obsah

 

 

 

Prßv∞ jste doΦetli Dobrodru₧stvφ v C#.

 

Pokud se chcete dozv∞d∞t vφce informacφ o programovßnφ v C#, nevßhejte a navÜtivte i dalÜφ souΦßstφ rubriky Visual C# .NET:

 

ZaΦφnßme s jazykem C# - Serißl je urΦen p°edevÜφm zßjemc∙m o studium zßkladnφch a pokroΦil²ch programovacφch prvk∙ v jazyku C#. Jestli₧e se chcete zaΦφt uΦit programovat prßv∞ v jazyku C#, nebo pat°φte-li k programßtor∙m, kte°φ p°echßzejφ z prost°edφ jinΘho programovacφho jazyka, naleznete v jednotliv²ch dφlech serißlu vÜe, co budete pot°ebovat ke snadnΘmu zvlßdnutφ jazyka C#.

 

Otßzky a odpov∞di û Trßpφ-li vßs n∞jak² programßtorsk² problΘm, na jeho₧ °eÜenφ ne a ne p°ijφt, pak jste na sprßvnΘm mφst∞. U Φtenß°∙ oblφbenß forma °eÜenφ potφ₧φ stylem otßzek a odpov∞dφ si naÜla sv∙j prostor i v naÜφ rubrice. Mßte-li problΘm, s kter²m nevφte hnout, poÜlete jeho popis autorovi rubriky, jen₧ vyvine maximßlnφ ·silφ pro rychlΘ vy°eÜenφ jakΘkoli programßtorskΘ zßhady.

 

 

Autor: Jßn Hanßk