|
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
┌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∙:
//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();
ááááááááááá }
ááááá }
}
ááááááááááá P°etφ₧enßMetoda.A objekt = new P°etφ₧enßMetoda.A();
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. |
ááááááááááá 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∞:
<?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. áá
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