Objekty a třídy
Každý objekt obsahuje: vlastnosti události metody např. Panel z předchozích příkladů: vlastnost BorderStyle událost Paint metoda Refresh Neplatí co objekt, to originál. V programu se často vyskytuje více objektů stejného druhu. Více textových polí, více popisků, více tlačítek Každé tlačítko může mít jiné rozměry, jiný text, jinou barvu, ale všechna tlačítka mají stejné vlastnosti (Text, ReadOnly, BackColor ), události (TextChanged, MouseHover ) a metody (Cut, Copy, Show, Refresh ). Takto chápanému druhu objektů se říká TŘÍDA.
Existují třídy textových polí, třídy popisků, třídy panelů, třídy tlačítek aj. Třídy mají svá jména. popisky Label tlačítka Button textová pole TextBox atd. Kdykoliv se v programu vytvoří objekt dané třídy, sáhne se do šablony a vytvoří se podle ní. Objekt je potom tzv. INSTANCE dané třídy. Instance znamená jeden případ, jeden konkrétní výskyt.
Dokumentace tříd Programátor si nemůže všechno pamatovat, proto je tu dokumentace. Zvolte v menu Nápověda a zkuste vyhledat popis třídy Pen. Složky třídy jsou uskupeny podle kategorií, nejdůležitější jsou Konstruktory (Constructors) Vlastnosti (Properties) Metody (Methods) Události (Events)
Podívejme se na konstruktory, tj. jak se dá vytvořit nová instance třídy Pen. Např. Pen (Color, Single) pro vytvoření pera určité barvy a tloušťky.
private void oknoprogramu_paint(object sender, PaintEventArgs e) { Graphics kp = e.graphics; // Vytvoříme nové pero Pen modrépero = new Pen(Color.Blue); kp.drawline(modrépero, 20, 0, 20, 100); // Změníme tloušťku pera na 10 pixelů modrépero.width = 10; kp.drawline(modrépero, 40, 0, 40, 100); // Změníme barvu pera na světle modrou modrépero.color = Color.LightBlue; kp.drawline(modrépero, 60, 0, 60, 100); } // Další pero dvouparametrickým konstruktorem Pen červenépero = new Pen(Color.Red, 20); kp.drawline(červenépero, 100, 0, 100, 100);
Vytvořte program, který nakreslí čáru o tloušťce, kterou uživatel zadá.
Jmenné prostory Aby se stejně pojmenované třídy nějak daly rozlišit, organizují se do větších celků, tzv. jmenných prostorů. Např. ovládací prvky pro Win aplikace patří do jmenného prostoru System.Windows.Forms. Graphics, Color nebo Pen patří do System.Drawing apod. Použití tříd z určitého jmenného prostoru se ve zdrojovém kódu zapisuje příkazem using. using System; using System.Drawing; using System.Windows.Forms; Pokud se jmenné prostory pomocí using neuvedou, je pak potřeba je uvádět u každého objektu, což není moc pohodlné viz další strana.
příklad výstkytu TextBox v různých jmenných prostorech
Statické složky třídy Ve třídách mohou být kromě běžných složek definovány také složky statické, které se neváží na konkrétní objekt a jejichž názvy se blíže určují jménem třídy. Ze statických složek se nedají vytvářet další instance, jedná se vždy pouze o jednu a tu samou společnou složku pro všechny instance třídy. Statické složky poznáme v dokumentaci podle symbolu S. Příklady statických metod a vlastností: MessageBox.Show, Convert.ToInt32, Convert.ToString, Pens.ConrnflowerBlue, Brushes.Pink, Color.Greed aj.
Autogenerující složky Vlastnosti či metody, jejichž hodnotou je objekt téže třídy. Např. typem statické vlastnosti Color.Red je typ Color. Např. třída Color nabízí také autogenerující metodu FromArgb.
private void oknoprogramu_load(object sender, EventArgs e) { // Žlutou barvu do proměnné (autogenerující vlastnost) Color žlutábarva = Color.Yellow; } // Získání barevných komponent RGB dané barvy // (použití složek objektu Color) int R = žlutábarva.r; int G = žlutábarva.g; int B = žlutábarva.b; // Zobrazení výsledků poležlutár.text = Convert.ToString(R); poležlutág.text = Convert.ToString(G); poležlutáb.text = Convert.ToString(B); kp.drawellipse(žlutépero, 0, 0, 70, 70); } private void panelmíchaná_paint(object sender, PaintEventArgs e) { Graphics kp = e.graphics; try { // Hodnoty z textových polí do číselné formy int R = Convert.ToInt32(poleMíchanáR.Text); int G = Convert.ToInt32(poleMíchanáG.Text); int B = Convert.ToInt32(poleMíchanáB.Text); // Namíchání barvy (autogenerující metoda) Color míchanábarva = Color.FromArgb(R, G, B); private void panelžlutá_paint(object sender, PaintEventArgs e) { Graphics kp = e.graphics; Color žlutábarva = Color.Yellow; Pen žlutépero = new Pen(žlutáBarva); kp.drawellipse(žlutépero, 0, 0, 70, 70); } } // Pero z míchané barvy (volání konstruktoru) Pen pero = new Pen(míchanáBarva); // Elipsa připraveným perem kp.drawellipse(pero, 0, 0, 70, 70); catch { } } private void všechnapolemíchaná_textchanged(object sender, EventArgs e) // Společná obsluha tří spodních textových polí { panelmíchaná.refresh(); }
Vytvořte program, který nakreslí kružnici tloušťky 3 pixelů, v odstínu šedi 0 255, jak uživatel zadá.
Výčtový typ Pokud je typem nějaké vlastnosti výčtový typ, značí to, že vlastnost může nabývat pouze vybraných předepsaných hodnot. Příkladem je třeba typ vlastnosti DashStyle objektů třídy Pen. Typ se jmenuje stejně DashStyle. Konkrétní hodnotu zapíšeme tak, že za jméno výčtového typu zapíšeme tečku a za ni jméno zvolené hodnoty např. DashStyle.Solid.
Hodnota Custom Dash DashDot DashDotDot Dot Solid Význam programátorem definovaný styl čáry čárkovaná čára čerchovaná čára dvojitá čerchovaná čára tečkovaná čára plná čára Vyzkoušejte: using System.Drawing.Drawing2D; private void oknoprogramu_paint(object sender, PaintEventArgs e) { Graphics kp = e.graphics; } Pen čerchovanépero = new Pen(Color.CornflowerBlue); čerchovanépero.dashstyle = DashStyle.DashDot; kp.drawrectangle(čerchovanépero, 10, 10, 100, 100);
Shrnutí Programátorské objekty se skládají z vlastností, událostí a metod. V programech je většinou více objektů stejného druhu, např. 4 tlačítka. Tomuto druhu objektů se říká třída. K jednotlivým třídám lze nalézt informace v nápovědě. Konstruktor je metoda, která vytváří nové instance dané třídy. V C# se konstruktor jmenuje vždy stejně jako daná třída a předchází mu slovo new. Třídy se sdružují do celků, tzv. jmenných prostorů. Použití jm. prostoru je potřeba uvést příkazem using. Kromě běžných složek mohou být definovány také složky statické, které se neváží na konkrétní objekt. Tzv. autogenerující složky třídy jsou vlastnosti nebo metody, jejichž hodnou je objekt téže třídy.
Vlastnost TextAlign textového pole udává zarovnání textu v poli. Jejím datovým typem je výčet HorizontalAlignment. Vyzkoušejte práci s tímto typem na programu, kde se textové pole zarovná podle stisknutého tlačítka.
Vlastnost FormBorderStyle udává styl okna programu. Jejím datovým typem je výčet FormBorderStyle. Vyzkoušejte práci s tímto typem.
Udělejte program, který zjistí kolik dní už jste na světě. Tipy: Na.NETu existují třídy DateTime a TimeSpan. Objekty DateTime zachycují jeden časový okamžik, TimeSpan dobu mezi nimi. Objekt DateTime může ukládat datum i čas. Pokud čas nezajímá, tak 0:00. Objekt DateTime lze vyrobit z textového řetězce autogenerující metodou DateTime.Parse. Aktuální datum lze zjistit autogenerující vlastností DateTime.Today. Doba mezi dvěma daty se určí jejich odečtením. Vznikne objekt třídy TimeSpan. Objekty TimeSpan mají řadu zajímavých vlastností, např. Days udává počet celých dní v příslušném časovém intervalu. Podrobnosti hledejte v nápovědě k DateTime a TimeSpan.
Př. Textové pole má v sobě vestavěnou reakci na klávesy Ctrl+X (vyjmout), Ctrl+V (vložit), Ctrl+C (kopírovat). Tyto operace lze provést také voláním metod Cut, Paste a Copy textového pole. To se hodí třeba tehdy, když chceme, aby uživatel mohl tyto volby volat z nabídky.
Př. vždy ve středu okna