Vývoj desktopových aplikací v C#/.NET

Události (1)
• Členy třídy umožňující objektu nebo třídě
reagovat na zprávy (události)
• Program může definovat metody, které mají
za úkol zpracovat příchozí zprávy, např.:
–
–
–
–
stisknutí klávesy
stisknutí tlačítka myši
pohyb myši
apod.
• Metoda realizující zpracování (obsluhu) zprávy (reagující na zprávu) se označuje jako tzv.
event handler (obslužná metoda)
2017-01-11
1
Události (2)
• Parametry obslužné metody musí odpovídat
definici prototypu funkce, která se nazývá
delegát (delegate, zástupce)
• Definice:
– delegáta se provádí pomocí delegate
– události pomocí klíčového slova event
• Metod obsluhujících události může být více
a jejich návratovým typem je typ void
• Odkaz na obslužnou metodu se:
– do události vkládá pomocí operátoru +=
– z události odebírá pomocí operátoru -=
2017-01-11
2
Částečné třídy (1)
• Jazyk C# dovoluje rozdělit zdrojový kód třídy do více samostatných souborů
• Používáno velmi často při tvorbě aplikací využívajících rozhraní Windows Forms nebo
Windows Presentation Foundation (WPF):
– část zdrojového kódu třídy, kterou programátor
může ručně upravovat, je uložena v souboru odděleném od kódu, který generuje přímo Visual
Studio
• Jestliže je třída rozdělena do více souborů,
musí jednotlivé části třídy (v každém souboru) být označeny klíčovým slovem partial
2017-01-11
3
Částečné třídy (2)
• Příklad (uloženo např. v souboru Prog1.cs):
partial class Ctverec
{
private int strana;
public Ctverec(int pocatecniStrana)
{
strana = pocatecniStrana;
}
public int GetStrana()
{
return strana;
}
}
2017-01-11
4
Částečné třídy (3)
• Příklad (uloženo např. v souboru Prog2.cs):
partial class Ctverec
{
public int UrciObsah()
{
return strana*strana;
}
public int UrciObvod()
{
return 4*strana;
}
}
2017-01-11
5
Windows Forms
• Rozhraní pro programování grafických aplikací
• Součást MS .NET Framework
• Poskytuje sadu tříd umožňujících přístup ke
standardním ovládacím prvkům operačního
systému MS Windows (okno, tlačítko, menu,
editační prvek atd.)
• Aplikace psané pomocí Windows Forms jsou
událostmi řízené
2017-01-11
6
Hierarchie tříd
Object
1
MarshalByRefObject
2
3
4
ListControl
ComboBox
Component
ListBox
Control
ScrollableControl
ContainerControl
Form
ButtonBase
Button
2017-01-11
4
ToolBar
Menu
RadioButton
MainMenu
TextBox
3
StatusBar
ContextMenu
TextBoxBase
2
ScrollBar
CheckBox
Label
1
PictureBox
MenuItem
Graphics
Application
MessageBox
7
Třída Application (1)
• Definována ve jmenném prostoru:
System.Windows.Forms
• Poskytuje metody, vlastnosti a události umožňující řídit běh aplikace
• Všechny členy třídy Application jsou statické
• Poznámka:
– třída Application je definována s modifikátorem sealed  není možné definovat třídu, která
by byla jejím potomkem
2017-01-11
8
Třída Application (2)
• Vlastnosti:
– ExecutablePath:
• vrací název souboru (včetně cesty), který spustil aplikaci
– OpenForms:
• vrací kolekci otevřených formulářů, které aplikace
vlastní
– StartupPath:
• vrací cestu k souboru, který spustil aplikaci (bez jména souboru)
2017-01-11
9
Třída Application (3)
• Metody:
– Restart:
• ukončí aplikaci a provede její opětovné spuštění
– Run:
• zahájí standardní cyklus očekávající příchod zprávy
(události)
• je-li jejím parametrem formulář (okno), pak se provede jeho zobrazení a metoda Run nevrátí řízení, dokud daný formulář není uzavřen
• typicky používána pro zobrazení hlavního okna aplikace
2017-01-11
10
Třída Control (1)
• Definována ve jmenném prostoru:
System.Windows.Forms
• Základní třída pro ovládací prvky systému
MS Windows (komponenty s vizuální reprezentací), např.:
–
–
–
–
formuláře (okna)
tlačítka
editační pole
rolovací lišty
• Implementuje základní podporu pro odpovídající objekty
2017-01-11
11
Třída Control (2)
• Vlastnosti:
– BackColor:
• udává barvu pozadí ovládacího prvku
– BackgroundImage:
• specifikuje obrázek zobrazený na pozadí ovládacího
prvku (*.gif, *.jpg, *.bmp, *.wmf, *.png)
– ClientSize:
• udává velikost (výšku a šířku) klientské části ovládacího prvku
– ContextMenuStrip:
• určuje kontextové menu zobrazené když uživatel
stiskne pravé tlačítko myši
2017-01-11
12
Třída Control (3)
– Cursor:
• určuje kurzor myši, který bude nad ovládacím prvkem použitý
– Enabled:
• udává, zda je ovládací prvek aktivní nebo nikoliv
(grayed)
– Focused:
• zjišťuje, zda má ovládací prvek vstupní zaměření
(focus)
– Font:
• specifikuje font textu použitého v ovládacím prvku
– ForeColor:
• určuje barvu popředí ovládacího prvku (např. u tlačítka se jedná o barvu textu)
– Handle:
• vrací popisovač (handle) daného ovládacího prvku
2017-01-11
13
Třída Control (4)
– Height:
• výška ovládacího prvku
– Left:
• x-ová souřadnice levého horního rohu ovládacího
prvku
– Location:
• souřadnice levého horního rohu ovládacího prvku
– Name:
• jedinečné jméno ovládacího prvku
– Size:
• výška a šířka ovládacího prvku
– TabIndex:
• určuje pořadí komponenty, ve kterém při stisku klávesy TAB získává vstupní zaměření (focus)
2017-01-11
14
Třída Control (5)
– TabStop:
• určuje, zda uživatel může ovládací prvek vybrat pomocí klávesy TAB
– Text:
• specifikuje text (titulek) ovládacího prvku
– Top:
• y-ová souřadnice levého horního rohu ovládacího
prvku
– Visible:
• udává, zda je (není) ovládací prvek viditelný
– Width:
• šířka ovládacího prvku
• Metody:
– Focus:
• nastavuje ovládacímu prvku vstupní zaměření (focus)
2017-01-11
15
Třída Control (5)
– Hide:
• skryje ovládací prvek
• ekvivalentní nastavení vlastnosti Visible na hodnotu false
– Invalidate:
• dává požadavek na překreslení ovládacího prvku
– Refresh:
• vynucuje překreslení ovládacího prvku (ekvivalentní
vyvolání metod Invalidate + Update)
– Show:
• učiní ovládací prvek viditelný
• ekvivalentní nastavení vlastnosti Visible na hodnotu true
2017-01-11
16
Třída Control (6)
– Update:
• provede překreslení ovládacího prvku (pouze pokud
byl předtím dán požadavek pomocí Invalidate)
• Události:
– Click:
• dojde k ní při klepnutí primárním (levým) tlačítkem
na ovládací prvek
– DoubleClick:
• dojde k ní při double-clicku primárním (levým) tlačítkem myši na ovládací prvek
– Enter:
• dojde k ní v době, kdy je ovládací prvek aktivován
2017-01-11
17
Třída Control (7)
– KeyPress:
• dojde k ní při stisku klávesy a je poslána ovládacímu
prvku mající vstupní zaměření (focus)
• je vyvolána pouze v případě, že se jedná o klávesu
reprezentující znak
• pro klávesy, které nereprezentují znak je zapotřebí
provést obsluhu události KeyDown, popř. KeyUp
– Leave:
• nastává v okamžiku, kdy vstupní zaměření opouští
ovládací prvek
– MouseDown:
• dojde k ní když kurzor myši je nad ovládacím prvkem a je proveden stisk některého tlačítka myši
2017-01-11
18
Třída Control (7)
– MouseMove:
• dojde k ní při pohnutí myší nad ovládacím prvkem
– MouseUp:
• dojde k ní když kurzor myši je nad ovládacím prvkem
a je provedeno uvolnění stisknutého tlačítka myši
– Paint:
• dojde k ní v době, kdy je ovládací prvek překreslován
– Resize:
• nastává v okamžiku, kdy se u ovládacího prvku mění
jeho velikost
– TextChanged:
• dojde k ní při změně textu ovládacího prvku
2017-01-11
19
Třída Form (1)
• Definována ve jmenném prostoru:
System.Windows.Forms
• Reprezentuje standardní okna (formuláře)
aplikace
• Třída Form může být využita pro vytvoření
a správu např.:
– hlavního okna aplikace
– dialogových oken
– oken pro aplikace MDI (Multiple Document
Interface)
2017-01-11
20
Třída Form (2)
• Vlastnosti:
– AcceptButton:
• specifikuje tlačítko v okně, které je stisknuto v okamžiku, kdy uživatel stiskne klávesu Enter
– ActiveControl:
• nastavuje (zjišťuje), který ovládací prvek v okně bude
mít (má) vstupní zaměření (focus)
• zděděno od třídy ContainerControl
– ActiveForm:
• vrací aktuální (aktivní) formulář aplikace
– ActiveMdiChild:
• vrací aktuální (aktivní) formulář v aplikaci MDI
2017-01-11
21
Třída Form (3)
– CancelButton:
• specifikuje tlačítko v okně, které je stisknuto v okamžiku, kdy uživatel stiskne klávesu Esc
– ControlBox:
• specifikuje, zda-li má být v titulním proužku zobrazená ikona se systémovým menu
– FormBorderStyle:
• udává vzhled a chování okraje okna (např. Sizable
FixedSingle, Fixed3D, FixedDialog)
– HelpButton:
• specifikuje, zda-li má být v titulním proužku zobrazeno tlačítko pro nápovědu
– Icon:
• specifikuje ikonu formuláře (okna) – *.ico
2017-01-11
22
Třída Form (4)
– KeyPreview:
• určuje, zda má formulář přijímat stisknuté klávesy dříve
než ovládací prvek mající vstupní zaměření (focus)
– MainMenuStrip:
• specifikuje hlavní menu formuláře (okna)
– MaximizeBox:
• specifikuje, zda-li má být v titulním proužku zobrazeno
tlačítko pro maximalizaci
– MinimizeBox:
• specifikuje, zda-li má být v titulním proužku zobrazeno
tlačítko pro minimalizaci
– StartPosition:
• určuje počáteční pozici okna (např. CenterScreen,
Manual, WindowsDefaultLocation)
2017-01-11
23
Třída Form (5)
– WindowState:
• udává stav okna (Normal, Minimized,
Maximized)
• Metody:
– Activate:
• aktivuje okno (předává mu vstupní zaměření)
– Close:
• provede uzavření okna
– LayoutMdi:
• uspořádá dceřiná okna aplikace MDI (Cascade,
TileHorizontal, TileVertical,
ArrangeIcons)
– ShowDialog:
• zobrazí okno jako modální dialogové okno
2017-01-11
24
Třída Form (6)
• Události:
– Activated:
• vzniká v době, kdy se formulář (okno) stává aktivním
– Deactivate:
• vzniká při deaktivaci okna (ztrátě vstupního zaměření)
– FormClose:
• nastává poté, kdy je formulář (okno) uzavřen
– FormClosing:
• nastává v okamžiku, kdy se formulář (okno) uzavírá
– Load:
• nastává před prvním zobrazením okna
– Shown:
• nastane, když je okno poprvé zobrazeno
2017-01-11
25
Třída MessageBox (1)
• Definována ve jmenném prostoru:
System.Windows.Forms
• Zobrazuje okno, které může obsahovat:
– text
– tlačítka
– symboly (ikony)
• Pro zobrazení MessageBoxu se používá metoda Show, která:
– je definovaná 21 různými způsoby (overloading)
– vrací hodnotu typu DialogResult vyjadřující,
kterým tlačítkem byl MessageBox ukončen
2017-01-11
26
Třída MessageBox (2)
• Tlačítka jsou typu MessageBoxButtons,
který definuje konstanty vyjadřující jaká
tlačítka budou zobrazena (OK, OKCancel,
AbortRetryIgnore, YesNoCancel,
YesNo, RetryCancel)
• Ikony jsou typu MessageBoxIcon, který
definuje následující konstanty: None, Hand,
Question, Exclamation, Asterisk,
Stop, Error, Warning, Information
2017-01-11
27
Třída Button
• Definována ve jmenném prostoru:
System.Windows.Forms
• Reprezentuje tlačítko
• Vlastnosti:
– DialogResult:
• určuje, zda (a jak) tlačítko uzavírá svůj modální rodičovský formulář
• hodnota DialogResult je vrácena metodou
ShowDialog
• Metody:
– PerformClick:
• simuluje uživatelský stisk klávesy
2017-01-11
28
Třída Label
• Definována ve jmenném prostoru:
System.Windows.Forms
• Ovládací prvek dovolující zobrazit textovou
informaci
• Vlastnosti:
– Text:
• specifikuje zobrazený text
• Poznámka:
– je-li zapotřebí zobrazit číselný údaj, pak je nezbytné jej nejprve převést na řetězec (pomocí
metody ToString nebo třídy Convert)
2017-01-11
29