Pokročilá práce s proměnnými
Protokolování Př. program, který bude protokolovat věty zadané uživatelem. polevěta, poleprotokol, tlačítkoodešli poleprotokol: ReadOnly na True Multiline na True ScrollBars na Both WordWrap na False
Složené přiřazení řetězce potřebujeme vzít text z horního pole a přidat ho k textům, které již jsou ve spodním poli a horní pole poté vymazat private void tlačítkoodešli_click(object sender, EventArgs e) { poleprotokol.text += polevěta.text; polevěta.text = null; } výraz a += b; znamená přiřaď do a to, co tam bylo plus b alternativně lze zapsat i pomocí běžného přiřazení: a = a + b;
Řádkování pro odřádkování v řetězci se používá statická vlastnost Newline třídy Environment poleprotokol.text += polevěta.text + Environment.NewLine;
Složení přiřazení čísla operátor += lze kromě připojení jednoho řetězce ke druhému použít i na zvětšení jednoho čísla o druhé ke zmenšení o číslo se používá operátor = Př. číslo += 10; funguje jako číslo = číslo + 10; číslo =20; funguje jako číslo = číslo 20;
Operátory ++ a -- Zvětšování a zmenšování o jedničku je v programování natolik časté, že na něj existují speciální operátory. ++ zvětší číslo o jedničku -- zmenší číslo o jedničku upravte předchozí program využitím ++ a --
Počítání Často se počítá, kolikrát se něco stalo, kolik je něčeho apod. Př. program, který spočítá, kolikrát někdo stisknul tlačítko
Potřebujeme nějakou proměnnou, do které budeme ukládat počet stisků. Proměnná musí vydržet déle, např. po celou dobu běhu programu, takže takovou proměnnou není možné deklarovat např. v metodě Load okna programu nebo Click tlačítka, protože při ukončení metody by taková proměnná zanikla. A to ještě neumíme, takže
Okno programu jako třída Vývojové prostředí nám automaticky vytváří třídu oknoprogramu. Okno programu je samozřejmě objektem, ale ve skutečnosti to, čemu dáváme název oknoprogramu, je nepojmenovanou instancí třídy oknoprogramu. public partial class oknoprogramu : Form na začátku každého našeho programu definuje novou třídu oknoprogramu odvozenou od třídy Form třída Form obsahuje všechno, co okno potřebuje
Ve vývojovém prostředí to funguje tak, že okno programu se odvozuje od třídy Form. Má tedy všechny složky jako ona plus něco navíc, třeba obslužné metody různých událostí v našem případě obsluhy stisků tlačítek. Ve třídě lze i deklarovat proměnné, v tom případě tyto proměnné existují v celé třídě a říká se jim členské proměnné. Proměnné, které jsme dosud používali, a které existovaly jenom uvnitř metod se nazývaly tzv. lokální proměnné.
using System; using System.Drawing; using System.Windows.Forms; namespace Počítání_stisků { public partial class oknoprogramu : Form { int početstisků = 0; public oknoprogramu() { InitializeComponent(); } private void tlačítkostisknimě_click(object sender, EventArgs e) { početstisků++; } private void tlačítkozobrazpočet_click(object sender, EventArgs e) { string zpráva = "Počet stisků: " + Convert.ToString(početStisků); MessageBox.Show(zpráva); } } } private void tlačítkovynulujpočitadlo_click(object sender, EventArgs e) { početstisků = 0; MessageBox.Show("Počitadlo vynulováno!"); }
Vyrobte program, který spojí tři textová pole do jednoho, kde bude kompletní adresa. Vyrobte program, který bude průběžně přičítat zadaná čísla.
Př. pohybující se panáček tlačítko posune o 5 px daným směrem S obrázky se pracuje jako s objekty třídy Image. Ze souboru lze obrázek načíst statickou metodou Image.FromFile. Metoda má jeden parametr jméno souboru. Umí PNG, JPEG, BMP, ICO, GIF, TIFF, WMF a EMF. Obrázek se vykresluje do kreslicí plochy voláním metody DrawImage. Jedna z variant vypadá DrawImage(obrázek, x, y); Aby obrázek neproblikával, nastavte vlastnost DoubleBuffer u okna programu na True.
Doslovný řetězec Pokud soubor (např. obrázek, zvuk), který chcete v programu otevřít, neleží přímo ve složce, kde je exe soubor s programem, je potřeba uvést celou cestu. Pokud byste ale použili zpětná lomítka, C# by je pochopil jako řídící znáky (my známe už \n) a nikoliv jako lomítka. Na to se použije tzv. doslovný řetězec, který je uvozen znakem @. new SoundPlayer( hlášení.wav ); new SoundPlayer(@ C:\Users\Vais\Desktop\ahoj.wav );
Vestavěná data Občas se hodí, když jsou pomocná data programu zabudována přímo v exe souboru a nikoliv v samostatných souborech. Upravíme předchozí příklad, aby byl obrázek zakompilován do exe souboru programu.
Projekt > Vlastnosti > Zdroje > Přidat zdroj > Přidat existující soubor Objekt lze pravým tlačítkem přejmenovat. V programu se potom na objekt odkazuje jako na Properties.Resources.Panáček.
Vyrobte program, který nakreslí kolečko v barvě naposled stisknutého tlačítka. Po spuštění programu nebude kolo nejdřív vůbec vidět Color.Transparent.
Ze třídy Environment lze zjistit spustu zajímavých věcí o počítači, kde program běží. Statická metoda GetFolderPath umožňuje zjistit cestu ke speciálním složkám jako Dokumenty, Plocha, Po spuštění aj. GetEnvironmentVariable umožňuje zobrazit hodnotu libovolné proměnné prostředí zkuste např. Path udávající prohledávané cesty při spuštění programů. Statická vlastnost UserName udává uživatelské jméno aktuálně pracujícího uživatele.
Otevřete si program pro kompletaci adresy ze tří polí a zkuste alternativně místo += použít metodu AppendText textového pole.
Upravte program s pohybujícím se panáčkem tak, aby po startu programu byl vždy přesně ve středu panelu. V případě, že se na disku soubor s panáčkem nenachází, program nesmí zhavarovat, ale měl by vypsat hlášku, že soubor s obrázkem nebyl nalezen. Upravte program tak, aby místo textů obsahoval obrázky šipek. Tip: Pracujte s BackgroudImage a BackgroudImageLayout. Přidejte do programu ješte políčko na možnost volby kroku pohybu, tj. o kolik pixelů se bude panáček posouvat.
Přehrávání melodie Instance třídy SoundPlayer umějí nabídnout víc než jenom metodu Play pro přehrátí wavu. Zkuste si za domácí úkol na programu např. metody PlayLooping, Stop, PlaySync (nepřehrává na pozadí, ale čeká, až hudba dohraje) Tip: using System.Media;
Př. upravte program, který maluje barevné prstence tak, aby maloval barevné kruhy. Háček je v tom, že zatímco pero se vytváří konstruktorem Pen, pro štětce však žádný konstruktor Brush neexistuje. Třída Brush zastupuje všemožné štětce a pro konkrétní druhy existují odvozené třídy SolidBrush, HatchBrush, TextureBrush, LinearGradientBrush a PathGradientBrush. Pro náš příklad použijte SolidBrush.
Př. vyzkoušejte si štětce, které šrafují. Konstruktor HatchBrush může přebírat tři parametry styl šrafování daný hodnotou výčtu HatchStyle, barva popředí a barva pozadí. Třída HatchBrush i výčet HatchStyle patří do jmenného prostoru System.Drawing.Drawing2D
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; namespace šrafování { public partial class oknoprogramu : Form { public oknoprogramu() { InitializeComponent(); } } } private void oknoprogramu_paint(object sender, PaintEventArgs e) { Graphics kp = e.graphics; HatchBrush štětec = new HatchBrush(HatchStyle.Cross, Color.Red, Color.Blue); kp.fillellipse(štětec, 50, 50, 100, 100); HatchBrush štětec2 = new HatchBrush(HatchStyle.DashedUpwardDiagonal, Color.DarkMagenta, Color.Gold); kp.fillellipse(štětec2, 100, 100, 100, 100); }