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

Visual Studio .NET 2002

Äßdn²

 

 

Obsah

Obtφ₧nost

╚as (min)

áP°edßvßnφ argument∙ hodnotou a odkazem

*áVytvß°enφ p°etφ₧enΘ metody

*áUmφst∞nφ u₧ivatelskΘho odkazu do okna Dynamic Help

 

 

P°edßvßnφ argument∙ hodnotou a odkazem

 

┌vodnφ tip bude pat°it vysv∞tlenφ procesu p°edßvßnφ argument∙ v jazyku C#. JeÜt∞ p°edtφm, ne₧ se dostaneme k p°edßvßnφ argument∙ hodnotou a odkazem, musφme si pov∞d∞t pßr slov k terminologii. Argumentem oznaΦujeme jakoukoliv platnou hodnotu, kterß bude p°edm∞tem p°edßvßnφ. Argumentem tak m∙₧e b²t celΘ Φφslo, Φφslo s pohyblivou desetinnou Φßrkou, textov² znak nebo °et∞zec. Argumentem m∙₧e b²t dokonce takΘ ukazatel na instanci jistΘ t°φdy. Aby bylo mo₧nΘ p°edßvanou hodnotu (argument) p°ijmout v cφlovΘ funkci, musφ tato funkce disponovat prom∞nnou, do kterΘ bude mo₧nΘ hodnotu ulo₧it. Tato prom∞nnß se naz²vß formßlnφ parametr funkce.

 

Poznßmka

V literatu°e o programovßnφ se formßlnφ parametr funkce naz²vß Φasto zkrßcen∞ jenom jako parametr.

 

Funkce nemusφ nutn∞ pracovat pouze s jednφm parametrem, prßv∞ naopak, formßlnφch parametr∙ m∙₧e b²t i n∞kolik. ZvyΦejn∞ vÜak platφ pravidlo, ₧e funkce mß tolik formßlnφch parametr∙, kolik vstupnφch hodnot oΦekßvß. Jestli₧e vφte, ₧e funkce bude v₧dy pracovat pouze s jednou celoΦφselnou hodnotou, staΦφ, kdy₧ budete deklarovat jenom jeden formßlnφ parametr.

 

Varovßnφ

Je velmi d∙le₧itΘ, abyste si zapamatovali rozdφl mezi argumentem a formßlnφm parametrem. Argument p°edstavuje hodnotu, kterß je p°edßvßna cφlovΘ, resp. volanΘ funkci. Kontejner, do kterΘho je argument ulo₧en, se naz²vß formßlnφ parametr. P°esto₧e je tento rozdφl mezi argumenty a formßlnφmi parametry z°eteln², mnoho autor∙ knih o programovßnφ si oba termφny neustßle plete a velice Φasto dochßzφ taktΘ₧ k vzßjemnΘmu zam∞≥ovßnφ t∞chto pojm∙.á

 

C#, podobn∞ jako i dalÜφ programovacφ jazyky platformy .NET, podporuje dva typy p°edßvßnφ argument∙: p°edßvßnφ argument∙ hodnotou a odkazem. Rozdφl mezi uveden²mi typy p°edßvßnφ argument∙ si vysv∞tlφme na nßsledujφcφch °ßdcφch.

 

P°i p°edßvßnφ argumentu hodnotou je volanΘ, resp. cφlovΘ funkci odevzdßna kopie p∙vodnφho argumentu. To znamenß, ₧e cφlovß funkce obdr₧φ kopii argumentu a nikoliv skuteΦn² argument. Proces p°edßvßnφ argumentu hodnotou je znßzorn∞n na obr. 1.

 

 

Obr. 1 û P°edßvßnφ argumentu hodnotou

 

P°i p°edßvßnφ argumentu hodnotou musφ procesor vykonat dodateΦnou prßci, proto₧e je zapot°ebφ p∙vodnφ argument podrobit kopφrovacφmu procesu. Formßlnφ parametr volanΘ funkce obdr₧φ kopii skuteΦnΘho argumentu, p°iΦem₧ v t∞le funkce je nßsledn∞ pou₧ita prßv∞ tato kopie. Funkce m∙₧e pou₧φt dodanou kopii argumentu v r∙zn²ch v²razech a takΘ m∙₧e s touto kopii provßd∞t jakΘkoliv platnΘ programovacφ operace. P°i t∞chto operacφch m∙₧e dojφt ke zm∞n∞ hodnoty kopie argumentu, ovÜem tato zm∞na nijak neovlivnφ p∙vodnφ argument ve volajφcφ funkci (ani nem∙₧e, proto₧e v t∞le funkce pracujeme s kopii p∙vodnφho argumentu a nikoliv se skuteΦnou podobou argumentu). Je-li argument p°edßvßn hodnotou, nikdy nem∙₧e dojφt k jeho zm∞n∞ û zm∞nit se m∙₧e jenom kopie argumentu, kterß je poskytnuta cφlovΘ funkci (ovÜem tato zm∞na je pouze doΦasnß, jeliko₧ ₧ivotnφ cyklus formßlnφho parametru cφlovΘ funkce je ohraniΦen samotnou ₧ivotnostφ tΘto funkce).

 

Varovßnφ

Platforma .NET Framework pov²Üila p°edßvßni argument∙ hodnotou na implicitnφ zp∙sob p°edßvßnφ argument∙. To tedy znamenß, ₧e jestli₧e nenφ v²slovn∞ urΦeno jinak, budou vÜechny argumenty p°edßvßny hodnotou. ╪eΦeno jin²mi slovy, v₧dy budou vytvo°enΘ kopie skuteΦn²ch argument∙ a teprve tyto budou p°edßny volan²m funkcφm.

 

Naproti tomu, p°i p°edßvßnφ argumentu odkazem je volanΘ funkci p°edßna skuteΦnß hodnota, tedy skuteΦn² argument. Cφlovß funkce tak pracuje s p∙vodnφm argumentem a je-li tento p∙vodnφ argument zm∞n∞n, tato zm∞na se projevφ takΘ ve volajφcφ funkci. Grafickou interpretaci p°edßvßnφ argumentu odkazem p°inßÜφ obr. 2.

 

 

Obr. 2 û P°edßvßnφ argumentu odkazem

 

P°edve∩me si nynφ ukßzku p°edßvßnφ argumentu hodnotou i odkazem v jednom fragmentu programovΘho k≤du:

 

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

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

ááááááááááááááááá //Deklarace prom∞nn²ch a a b typu int.

ááááááááááááááááá int a, b;

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

ááááááááááááááááá //VφcenßsobnΘ p°i°azenφ hodnoty 10 do prom∞nn²ch a a b.

ááááááááááááááááá a = b = 10;

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

ááááááááááááááááá //Zavolßnφ prvnφ funkce. Funkci je p°edßna hodnota

ááááááááááááááááá //prom∞nnΘ a (jde o p°edßnφ argumentu hodnotou).

ááááááááááá ááááá CφlovßFunkce1(a);

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

ááááááááááááááááá //Aktivace druhΘ funkce. Funkci je p°edßna hodnota

ááááááááááááááááá //prom∞nnΘ b (jde o p°edßnφ argumentu odkazem). Proto₧e je

ááááááááááááááááá //hodnota prom∞nnΘ b p°edßvßna odkazem, musφ b²t p°ed jmΘno

ááááááááááááááááá //prom∞nnΘ umφst∞no klφΦovΘ slovo ref.

ááááááááááááááááá CφlovßFunkce2(ref b);

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

ááááááááááááááááá //Deklarace referenΦnφ prom∞nnΘ txtBox1, vytvo°enφ instance

ááááááááááááááááá //t°φdy TextBox a umφst∞nφ odkazu na vniklou instanci do

ááááááááááááááááá //referenΦnφ prom∞nnΘ. Vytvß°φme tedy novΘ textovΘ pole.

ááááááááááááááááá TextBox txtBox1 = new TextBox();

 

ááááááááááááááááá //P°idßnφ vytvo°enΘ instance t°φdy TextBox na formulß°.

ááááááááááááááááá this.Controls.Add(txtBox1);

 

ááááááááááááááááá //UrΦenφ velikosti instance t°φdy TextBox.

ááááááááááááááááá txtBox1.Size = new Size(200, 150);

 

ááááááááááááááááá //UrΦenφ pozice instance t°φdy TextBox.

ááááááááááááááááá txtBox1.Location = new Point(10, 10);

 

ááááááááááááááááá //Text, jen₧ se objevφ v textovΘm poli.

ááááááááááááááááá txtBox1.Text = "Prom∞nnß a: " + a + " Prom∞nnß b: " + b;

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

ááááááááááá

ááááááááááá //Definice prvnφ funkce.

ááááááááááá private void CφlovßFunkce1(int FormßlnφParametr1)

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

ááááááááááááááááá //Modifikace kopie p∙vodnφho argumentu.

ááááá ááááááááááá FormßlnφParametr1 = FormßlnφParametr1 * 2;

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

 

ááááááááááá //Definice druhΘ funkce. VÜimn∞te si, ₧e p°ed urΦenφm datovΘho typu

ááááááááááá //formßlnφho parametru se nachßzφ klφΦovΘ slovo ref.

ááááááááááá private void CφlovßFunkce2(ref int FormßlnφParametr2)

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

ááááááááááááááááá //Modifikace p∙vodnφho argumentu.

ááááááááááááááááá FormßlnφParametr2 = 10 * FormßlnφParametr2 % 6;

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

 

V ·loze volajφcφ funkce vystupuje zpracovatel udßlosti Click tlaΦφtka button1. V t∞le volajφcφ funkce jsou deklarovßny dv∞ prom∞nnΘ (a, b), kterΘ jsou vzßp∞tφ nabφdnuty cφlov²m funkcφm. M∞jte na pam∞ti, ₧e p°i p°edßvßnφ argument∙ hodnotou nemusφte pou₧φvat ₧ßdnΘ dodateΦnΘ programovacφ elementy, proto₧e tato varianta p°edßvßnφ argument∙ je implicitnφ. Na druhΘ stran∞, p°i p°edßvßnφ argument∙ odkazem je zapot°ebφ pou₧φt klφΦovΘ slovo ref, kterΘ naznaΦuje, ₧e chcete pou₧φt prßv∞ tento zp∙sob p°edßvßnφ argument∙. KlφΦovΘ slovo ref se musφ vyskytovat na dvou mφstech:

 

 

ááááá ááááá CφlovßFunkce2(ref b);

 

 

á

ááááá ááááá private void CφlovßFunkce2(ref int FormßlnφParametr2)

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

ááááááááááááááááá //Modifikace p∙vodnφho argumentu.

ááááááááááááááááá FormßlnφParametr2 = 10 * FormßlnφParametr2 % 6;

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

 

P°elo₧φte-li d°φve uveden² k≤d prost°ednictvφm kompilßtoru, uvidφte, ₧e po zavolßnφ obou funkcφ bude hodnota prom∞nnΘ a nezm∞n∞na (10), zatφmco hodnota prom∞nnΘ b bude zcela jinß (4).

 

Poznßmka

A jak jsme dosp∞li k hodnot∞ modifikovanΘ podob∞ prom∞nnΘ b? Hodnotu prom∞nnΘ b vypoΦφtßvß tento °ßdek zdrojovΘho k≤du:

 

FormßlnφParametr2 = 10 * FormßlnφParametr2 % 6;

 

áAlgoritmus v²poΦtu novΘ hodnoty prom∞nnΘ b mß p°ibli₧n∞ tuto podobu:

 

1.      P∙vodnφ hodnota prom∞nnΘ b (10) je vynßsobena Φφslem 10. V²sledkem souΦinu je tedy hodnota 100.

2.      Na hodnotu, je₧ vzeÜla ze souΦinu, je aplikovßn operßtor modulus (%). Operßtor modulus vracφ zbytek po celoΦφselnΘm d∞lenφ. Jeliko₧ 100 / 6 = 16, zbytek po celoΦφselnΘm d∞lenφ je 4 (100 û (16 * 6) = 100 û 96 = 4).

 

 

Vytvß°enφ p°etφ₧enΘ metody

 

P°i programovßnφ se velice Φasto stßvß, ₧e pot°ebujete vytvo°it metodu s jednφm nßzvem, ovÜem chcete, aby se metoda chovala p°i r∙zn²ch p°φle₧itostech r∙zn∞. Nap°φklad budete chtφt naprogramovat metodu ZaΦφtKreslit, ale budete chtφt, aby metoda n∞kdy nakreslila obdΘlnφk a jindy zase elipsu, Φi n∞jak² jin² komplexnφ geometrick² ·tvar. V tΘto situaci vßm p°ijde vhod technika, kterΘ se °φkß p°etφ₧enφ metody. P°etφ₧it metodu znamenß vytvo°it dalÜφ variantu metody, p°iΦem₧ tato novß varianta bude mφt stejn² nßzev jako metoda p∙vodnφ, ovÜem liÜit se bude seznamem sv²ch parametr∙.

 

Varovßnφ

Modifikacφ p∙vodnφ metody m∙₧ete vytvo°it kolik chcete, ovÜem musφte pamatovat na skuteΦnost, ₧e:

 

a)      VÜechny varianty metody musφ mφt stejn² nßzev jako originßlnφ metoda.

b)      VÜechny varianty metody se musφ odliÜovat svou signaturou, tedy seznamem parametr∙.

c)       Modifikßtory p°φstupu a nßvratovΘ hodnoty nov²ch variant metody se mohou od sv²ch p∙vodnφch prot∞jÜk∙ liÜit, ale takΘ mohou z∙stat stejnΘ.

áá

Budete-li chtφt vytvo°it p°etφ₧enou metodu, postupujte podle nßsledujφcφch krok∙:

 

  1. Spus¥te Visual C# .NET a vytvo°te standardnφ aplikaci pro Windows (Windows Application).
  2. Do projektu p°idejte soubor s k≤dem t°φdy (Project à Add Class).
  3. K≤d, jen₧ se nachßzφ v souboru s k≤dem t°φdy, upravte podle nßsledujφcφho vzoru:

 

//Import d∙le₧it²ch jmenn²ch prostor∙.

using System;

using System.Drawing;

using System.Windows.Forms;

 

//Deklarace jmennΘho prostoru, v n∞m₧ je ulo₧ena t°φda A.

namespace P°etφ₧enßMetoda

{

ááááá /// <summary>

ááááá /// T°φda ukazuje pou₧itφ p°etφ₧enΘ metody.

ááááá /// </summary>

ááááá public class A

ááááá {

ááááááááááá //Konstruktor t°φdy A.

ááááááááááá public A()

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

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

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

 

ááááááááááá //Definice prvnφ varianty p°etφ₧enΘ metody ZaΦφtKreslit.

ááááááááááá public void ZaΦφtKreslit(int PoziceX, int PoziceY,

ááááááááááááááááá int èφ°ka, int V²Üka, bool KreslitV²pl≥)

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

ááááááááááááááááá //Deklarace odkazovΘ prom∞nnΘ frm a ulo₧enφ ukazatele na

ááááááááááááááááá //aktußlnφ instanci t°φdy Form do tΘto prom∞nnΘ.

ááááááááááááááááá Form frm = Form.ActiveForm;

 

ááááááááááááááááá //Vytvo°enφ instance t°φdy Rectangle a urΦenφ pozice

ááááááááááááááááá //a velikosti vytvo°enΘ instance.

ááááááááááááááááá Rectangle obd = new Rectangle(new Point(PoziceX, PoziceY),

ááááááááááááááááááááááá new Size(èφ°ka, V²Üka));

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

ááááááááááááááááá //Vytvo°enφ grafickΘho pera, neboli instance t°φdy Pen.

ááááááááááááááááá //Je v²slovn∞ urΦeno, ₧e grafickΘ pero mß mφt Φervenou barvu

ááááááááááááááááá //a tlouÜ¥ku 4 jednotky.

ááááááááááááááááá Pen p = new Pen(Color.Red, 4.0F);

 

ááááááááááááááááá //Vytvo°enφ grafickΘho Üt∞tce (instance t°φdy SolidBrush),

ááááááááááááááááá //jen₧ mß oran₧ovou barvu.

ááááááááááááááááá Brush b = new SolidBrush(Color.Orange);

 

ááááááááááááááááá //Vytvo°enφ grafickΘho objektu pomocφ metody CreateGraphics.

ááááááááááááááááá Graphics g = frm.CreateGraphics();

 

ááááááááááááááááá //Metoda DrawRectangle mß na starosti nakreslenφ obdΘlnφku.

ááááááááááááááááá g.DrawRectangle(p, obd);

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

ááááááááááááááááá //Jestli₧e je doruΦen po₧adavek na vykreslenφ v²pln∞

ááááááááááááááááá //obdΘlnφku, bude zavolßna metoda FillRectangle,

ááááááááááááááááá //kterß vyplnφ vnit°nφ plochu obdΘlnφku oran₧ovou barvou.

ááááááááááááááááá if (KreslitV²pl≥)

ááááááááááááááááááááááá g.FillRectangle(b, obd);

 

ááááááááááááááááá //Po skonΦenφ pracφ dochßzφ k uvoln∞nφ pam∞¥ov²ch zdroj∙,

ááááááááááá ááááá //kterΘ byly alokovanΘ grafick²mi objekty.

ááááááááááááááááá g.Dispose();

ááááááááááááááááá b.Dispose();

ááááááááááááááááá p.Dispose();

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

ááááá

ááááááááááá //Definice druhΘ varianty p°etφ₧enΘ metody. Na rozdφl od prvnφ

ááááááááááá //verze p°etφ₧enΘ metody, tato metoda umo₧≥uje u₧ivateli

ááááááááááá //nastavit takΘ barvu v²pln∞ pro nakreslen² obdΘlnφk.

ááááááááááá public void ZaΦφtKreslit(int PoziceX, int PoziceY,

ááááááááááááááááá int èφ°ka, int V²Üka, bool KreslitV²pl≥, Color BarvaV²pln∞)

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

ááááááááááááááááá //Deklarace odkazovΘ prom∞nnΘ frm a ulo₧enφ ukazatele na

ááááááááááááááááá //aktußlnφ instanci t°φdy Form do tΘto prom∞nnΘ.

ááááááááááááááááá Form frm = Form.ActiveForm;

 

ááááááááááááááááá //Vytvo°enφ instance t°φdy Rectangle a urΦenφ pozice

ááááááááááááááááá //a velikosti vytvo°enΘ instance.

ááááááááááááááááá Rectangle obd = new Rectangle(new Point(PoziceX, PoziceY),

ááááááááááááááááááááááá new Size(èφ°ka, V²Üka));

 

ááááááááááááááááá //Deklarace referenΦnφ prom∞nnΘ, do kterΘ bude mo₧nΘ

ááááááááááááááááá //ulo₧it odkaz na instanci t°φdy SolidBrush.

ááááááááááááááááá Brush b;

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

ááááááááááááááááá //Vytvo°enφ grafickΘho pera, neboli instance t°φdy Pen.

ááááááááááááááááá //Je v²slovn∞ urΦeno, ₧e grafickΘ pero mß mφt Φervenou

ááááááááááááááááá //barvu a tlouÜ¥ku 4 jednotky.

ááááááááááááááááá Pen p = new Pen(Color.Red, 4.0F);

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

ááááááááááááááááá //Jestli₧e je formßlnφ parametr BarvaV²pln∞ prßzdn²

ááááááááááááááááá //(IsEmpty), je generovßna v²jimka, kterß °φkß,

ááááááááááááááááá //₧e BarvaV²pln∞ nebyla inicializovßna. V opaΦnΘm p°φpad∞

ááááááááááááááááá //je vytvo°ena instance t°φdy SolidBrush, p°iΦem₧

ááááááááááááááááá //konstruktoru t°φdy je p°edßna hodnota formßlnφho

ááááááááááááááááá //parametru BarvaV²pln∞.

ááááááááááááááááá if (BarvaV²pln∞.IsEmpty)

ááááááááááááááá ááááááá throw new

áááááááááááááááááááááááááááá Exception("BarvaV²pln∞ nebyla inicializovßna.");

ááááááááááááááááá else

ááááááááááááááááááááááá b = new SolidBrush(BarvaV²pln∞);

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

ááááááááááááááááá //Vytvo°enφ grafickΘho objektu pomocφ metody CreateGraphics.

ááááááááááááááááá Graphics g = frm.CreateGraphics();

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

ááááááááááááááááá //Metoda DrawRectangle mß na starosti nakreslenφ obdΘlnφku.

ááááááááááááááááá g.DrawRectangle(p, obd);

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

ááááááááááááááááá //Jestli₧e je doruΦen po₧adavek na vykreslenφ v²pln∞

ááááááááááááááááá //obdΘlnφku, bude zavolßna metoda FillRectangle,

ááááááááááááááááá //kterß vyplnφ vnit°nφ plochu obdΘlnφku oran₧ovou barvou.

ááááááááááááááááá if (KreslitV²pl≥)

ááááááááááááááááááááááá g.FillRectangle(b, obd);

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

ááááááááááááááááá //Po skonΦenφ pracφ dochßzφ k uvoln∞nφ pam∞¥ov²ch zdroj∙,

ááááááááááááááááá //kterΘ byly alokovanΘ grafick²mi objekty.

ááááá ááááááááááá g.Dispose();

ááááááááááááááááá b.Dispose();

ááááááááááááááááá p.Dispose();

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

 

ááááá }

}

 

  1. Na formulß° p°idejte instanci ovlßdacφho prvku Button a do jejφ udßlostnφ procedury Click zadejte programov² k≤d pro vytvo°enφ instance t°φdy A.

 

ááááááááááá P°etφ₧enßMetoda.A objekt = new P°etφ₧enßMetoda.A();

 

  1. Dßle zadejte nßzev instance (objekt), teΦku a ze seznamu dostupn²ch metod vyberte metodu ZaΦφtKreslit. VÜimn∞te si, ₧e ihned jak zadßte otevφracφ zßvorku za jmΘnem metody, technologie IntelliSense vßm nabφdne bublinovou nßpov∞du se seznamem variant p°etφ₧enΘ metody (obr. 3).

 

 

Obr. 3 û Technologie IntelliSense a prvnφ varianta p°etφ₧enΘ metody

 

V levΘ Φßsti okna s bublinovou nßpov∞dou se nachßzejφ malΘ Üipky (a ), pomocφ kter²ch si m∙₧ete prohlφ₧et vÜechny alternativy p°etφ₧enΘ metody. Jestli₧e klepnete na druhou Üipku (), uvidφte dalÜφ dostupnou variantu metody ZaΦφtKreslit (obr. 4).

 

 

Obr. 4 û Technologie IntelliSense a druhß varianta p°etφ₧enΘ metody

 

Tip

Pokud si chcete prohlΘdnout jednotlivΘ verze p°etφ₧enΘ metody, nemusφte nutn∞ klepat na tlaΦφtka se Üipkami. Stejn² ·Φinek toti₧ dosßhnete takΘ pou₧itφm kurzorov²ch klßves na klßvesnici.

 

  1. P°etφ₧enß verze metody ZaΦφtKreslit vßm umo₧≥uje urΦit barvu v²pln∞. Budete-li chtφt nakreslit obdΘlnφk s oran₧ovou v²plnφ, zavolejte metodu v tΘto podob∞:

 

ááááááááááá objekt.ZaΦφtKreslit(20, 30, 200, 100, true, Color.Orange);

 

 

Umφst∞nφ u₧ivatelskΘho odkazu do okna Dynamic Help

 

IntegrovanΘ prost°edφ Visual Studia .NET s sebou p°ineslo novou dimenzi p°φstupu k informaΦnφm zdroj∙m. VeÜkerΘ akce programßtora jsou peΦliv∞ kontrolovßny a na zßklad∞ stylu prßce programßtora se v okn∞ Dynamic Help zobrazujφ odkazy na tΘmata, o kter²ch si Visual Studio .NET myslφ, ₧e by mohla b²t pro v²vojß°e u₧iteΦnß. AΦkoliv je technologie, na zßklad∞ kterΘ pracuje interaktivnφ vyhledßvßnφ informacφ, znaΦn∞ komplikovanß, dozvφte se, jak p°idat sv∙j vlastnφ odkaz do okna Dynamic Help, a to prost°ednictvφm sprßvn∞ nakonfigurovanΘho XML souboru.

 

Poznßmka

Krom∞ pou₧itφ XML souboru existuje jeÜt∞ jeden zp∙sob, jak do okna Dynamic Help umφstit odkazy na vlastnφ tΘmata. V tomto p°φpad∞ je nutnΘ vytvo°it kompilovan² soubor nßpov∞dy novΘ generace s nßzvem MS Help 2.0. Kompilovan² soubor mß extenzi HxS a lze jej vytvo°it ve specißlnφm softwaru s nßzvem Help Workshop (tento software je souΦßstφ kolekce Visual Studio .NET Help Integration Kit, VSHIK).

 

Postupujte nßsledovn∞:

 

  1. Spus¥te Visual Studio .NET a vytvo°te nov² XML soubor (FileàNewàFile).
  2. Obsah XML souboru upravte nßsledovn∞:

 

<?xml version="1.0" encoding="utf-8" ?>

<DynamicHelp xmlns="http://msdn.microsoft.com/vsdata/xsd/vsdh.xsd"

xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"

xsi:schemaLocation="http://msdn.microsoft.com/vsdata/xsd/vsdh.xsd">

áá <Context>

ááááá <Keywords>

áááááááá <KItem Name="VS.SolutionExplorer"/>

ááááá </Keywords>

ááááá <Links>

ááááááá <LItem URL="http://www.MojeWebStranka.cz"

ááááááá LinkGroup="Samples">Otevrit internetovy prohlizec</LItem>

ááááá </Links>

áá </Context>

</DynamicHelp>

 

Tip

Pokud budete chtφt zkopφrovat uveden² XML k≤d do souboru, jen₧ mßte otev°en² ve Visual Studiu .NET, p°i vklßdßnφ k≤du ze schrßnky pou₧ijte p°φkaz Paste as HTML z nabφdky Edit. Jestli₧e byste toti₧ pou₧ili jednoduch² p°φkaz Paste, nebyl by XML k≤d sprßvn∞ vlo₧en do cφlovΘho souboru.

 

XML soubor pou₧φvß n∞kolik specifick²ch znaΦek, kterΘ je pro zobrazenφ odkazu v okn∞ Dynamic Help nutnΘ implementovat. ZnaΦkou nejvyÜÜφ ·rovn∞ je DynamicHelp, kterß slou₧φ pro urΦenφ odkazu na XSD soubor s nßzvem vsdh. Referenci na soubor vsdh.xsd je pot°ebnΘ za°adit, proto₧e jinak by nßÜ odkaz nebyl funkΦnφ. Ka₧dΘ tΘma, na kterΘ se chcete odkßzat, je reprezentovßno znaΦkou Context. ZnaΦka Context obsahuje dv∞ vno°enΘ znaΦky: Keywords a Links. ZnaΦka Keywords obsahuje vno°enou znaΦku KItem, kterß deklaruje klφΦovΘ slovo (atribut Name). Toto klφΦovΘ slovo p°edstavuje jistou programovou entitu ve Visual Studiu. NET. V naÜem p°φpad∞ je touto entitou okno Solution Explorer, co₧ znamenß, ₧e bude-li toto okno aktivnφ, v okn∞ Dynamic Help se zobrazφ nßÜ odkaz. Podrobnosti t²kajφcφ se odkazu jsou determinovßny ve znaΦce LItem (tato znaΦka je vno°enou znaΦkou znaΦky Links). ZnaΦka LItem obsahuje znaΦn² poΦet atribut∙, ovÜem pro nßs jsou d∙le₧itΘ zejmΘna dva z nich: URL a LinkGroup. Atribut URL definuje cφlov² objekt, na kter² bude odkaz nasm∞rovßn. Tφmto objektem m∙₧e b²t webovß strßnka na vzdßlenΘ poΦφtaΦovΘ stanici, nebo HTML dokument na lokßlnφm PC. Atribut LinkGroup urΦuje skupinu odkaz∙, do kterΘ bude nßÜ odkaz za°azen. V naÜφ ukßzce bude odkaz ulo₧en do skupiny, resp. sekce Samples okna Dynamic Help. áá

 

  1. Ulo₧te XML soubor do adresß°e \Visual Studio .NET\Common7\IDE\HTML\XMLLinks\1033.
  2. Zav°ete Visual Studio .NET a op∞tovn∞ jej spus¥te.
  3. Klepn∞te na dialogovΘ okno Solution Explorer a podφvejte se do okna Dynamic Help. V sekci Samples by se m∞la objevit novß polo₧ka Otevrit internetovy prohlizec (obr. 5).

 

 

Obr. 5 û U₧ivatelsk² odkaz v dialogovΘm okn∞ Dynamic Help

 

Klepnete-li na tuto polo₧ku, Visual Studio .NET se pokusφ otev°φt specifikovanou webovou strßnku v internφm prohlφ₧eΦi.

 

 

Jßn Hanßk