Pokud není uvedeno jinak, ukázky jsou v jazyce Pascal.
OOP (objektově orientované programování) s událostm. Událost je změna stavu. Program se ovládá (může i jen částečně) pomocí událostí objektů, které vyvolají akci.
Při změně stavu objektu se automaticky vyvolá událost. Událost lde také vyvolávat programově.
Předávání událostí provede metoda, která se provede při události.
Formulářové aplikace, webové aplikace.
V podstatě všechny moderní programovací jazyky, zvláště pokud podporují tvorbu grafických či formulářových aplikací.
Např. Object Pascal, Visual Basic, C#, JavaScript...
OnChange
- při změně vlastností objektuOnCreate
- při (resp. po) vytvoření objektuOnDestroy
- při (resp. před) zničením objektuOnActivate
- při aktivaci objektuOnFocus
- při zaměření objektu, např. inputu pro text
OnKeyDown
- při stisknutí klávesyOnKeyUp
- při puštění klávesyOnKeyPress
- klávesa byla zmáčknuta
OnClick
- při kliknutíOnDblClick
- při dvojklikuOnMouseDown
- při stisknutí myšiOnMouseUp
- při uvolnění stisknutí myšiOnMouseWheel
- při použití kolečka na myšiOnDragDrop
- při přesouvání objektu myšíOnMouseLeave
- když myš opustí plochu objektu
Metoda, která poslouchá danou událost na objektu a při nastání události vykoná svůj obsah. Handler metodu lze registrovat i odregistrovat.
Sender je speciální objekt, který obsahuje informaci o objektu, který událost vyvolal.
Parametry pro upřesnění události, ke které právě došlo.
Pascal:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
...
end;
C#:
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
...
}
13. Uveďte příklad handleru pro událost posun posuvníku (ScrollBar) v jazyce Pascal a C# a odlišnosti.
Pascal:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
...
end;
C#:
private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
...
}
Pascal:
udalost := @handler;
C#:
udalost += handler;
Pascal:
udalost := nil;
C#:
udalost -= handler;
Pascal:
objekt.udalost(sender, parametry);
C#:
objekt.udalost(sender, objekt_s_parametry);
17. Uveďte příklad, jak lze vyvolat (spustit) událost (raise event.) programově v jazyce Pascal a C#.
???
V jazyce Pascal jsou parametry události samostatné parametry - musí se zadávat jeden po druhém, kdežto v jazyce C# jsou parametry reprezentovány jedním speciálním objektem, např. ScrollEventArgs
.
Vytvoří se nová třída (pomocí dědičnosti) odvozená od EventArgs.
Vzor Visitor. Ten umožní registraci obejktu jako odesílatele události a když událost nastane, objekt dá vědět. Používají se pojmy jako subscribe a unsubscribe.