Догађаји

Догађаји компоненти

За све наведене компоненте постоје и разноразни догађаји. Већ смо спомињали неке догађаје, а овде ћемо детаљније објаснити шта све може да буде догађај.

*Све што урадимо директном акцијом помоћу миша или тастатуре, али и све што је последица извршавања програма или неког дела програма, може бити догађај.

На пример, клик мишем, притисак на неко дугме на тастатури или отпуштање дугмета на тaстстури, прелазак показивача миша преко компоненте (тј. објекта), представљају догађаје.

Задатак програма је да одлучи који догађаји ће одговарати којим компонентама и шта ће се дешавати после одређеног догађаја у тој апликацији. Ако ни за један догађај није написан код, онда се у апликацији неће дешавати ништа.

Као што се сва својства компоненти налазе у Properties Widows-у, тако се ту налазе и догађаји. Као што прво морамо са форме да селектујемо компоненту којој желимо да подесимо својства, тако морамо исто да селектујемо и компоненту којој желимо да доделимо неки догађај. Да бисмо видели све понуђене догађаје за селектовану компоненту, потребно је да кликнемо на четврту по реду иконицу . Уколико кликнемо на прву по реду иконицу , сви догађаји ће бити организовани у разне категорије као што је приказано на Слици 3.1, а уколико желимо да сви догађаји буду организована по абецедном реду, како је приказано на Слици 3.2, онда кликнемо на другу по реду иконицу . У самом дну Properties Widows-a je део у коме се, када се кликне на неки догађај, исписује додатно објашњење о том догађају.

Слика 3.1. Догађаји организовани по категоријама Слика 3.2. Догађаји организовани по абецедном реду

Напомена: Приликом рада са компонентама, често ћемо користити и својства и догађаје из Properties Widows-а. Због овога треба да обратимо пажњу на иконицу , која пружа приказ свих својстава компоненте, и , која пружа приказ свих догађаја компоненте. Кад год је потребно да се у Properties Widows-у прикажу својства, кликнемо на иконицу , а кад год је потребно да се у Properties Widows-у прикажу догађаји компоненти, кликнемо на иконицу .

Не реагују све компоненте на исти број догађаја. Неке компоненте могу да реагују на велики број догађаја, док неке реагују на врло мали број догађаја.

Догађаји који се најчешће користе

Приликом рада са компонентама Button, Label, TextBox, RichTextBox, PictureBox и приликом рада са формом, најчешће се користе следећи догађаји.

Click - клик на објекат (тај објекат може бити нека од ових пет наведених компоненти, или форма)
DoubleClick - двоструки клик на објекат
MouseClick - када се кликне мишем на објекат (нема суштинске разлике између овог догађаја и догађаја Click)
DoubleMouseClick - двоструки клик мишем на објекат
MouseDown - када је показивач миша на објекту и леви тастер на мишу је стистнут
MouseMove - када показивачем миша пређемо преко објекта
MouseUp - када је показивач миша на објекту и леви тастер миша се отпусти
Load - када се покрене програм

Ово су само неки догађаји које ћемо за почетак да користимо.

За разлику од ових компоненти и од форме, компонента Timer има само један догађај.

Tick - деси се нека акција када прође одређени временски интервал и та акција се периодично понавља

Уколико желимо да придружимо неки догађај некој компоненти, прво селектујемо ту компоненту, а затим у Properties Windows-у кликнемо два пута на догађај који желимо да придружимо тој компоненти. Када кликнемо два пута на тај догађај појавиће се део кода, баш као када смо мењали својства компоненти преко кода. На пример, желимо компоненти Button да придружимо догађај MouseClick (клик мишем на дугме), па зато кликнемо два пута на догађај MouseClick у Properties Windows-у. Појавиће се део кода који је приказан на Слици 3.3.

Слика 3.3. Унапред генерисан код

Између заграда уоквиреног кода, пишемо део програма који ће се извршити када мишем кликнемо на дугме. На пример, кликом миша на дугме, дугме мења боју у црвено. Део програма који одговара овој акцији и који се пише на поменутом месту изгледа овако:


private void button1_MouseClick(object sender, MouseEventArgs e)
{
    //Ovo je zapravo promena boje dugmeta, koja se izvrsava kada
    //se klikne misem na dugme
    button1.BackColor = Color.Red;
}

У једном пројекту ће се појављивати по неколико догађаја, па можемо да обрадимо још један догађај и у овом нашем примеру. На пример, када кликнемо два пута на форму, у лабели, коју смо додали форми, се испише порука Кликнули сте два пута на форму! и то црвеном бојом.

Пошто ова акција треба да се изврши када се кликне два пута на форму, онда селиктујемо форму и два пута кликнемо на догађај DoubleClick у Properties Windows-у. Одмах испод дела кода који одговара предходном догађају који смо обрадили ће се појавити део кода везан за догађај DoubleClick (Слика 3.4).

Слика 3.4. Програмски код

На Слици 3.4 жутом бојом је уоквирен код који одговара догађају који смо већ обрадили, а црвеном бојом је уоквирен код који одговара догађају DoubleClick. Део програма који омогућава извршавање акције треба да изгледа овако:


private void Form1_DoubleClick(object sender, EventArgs e)
{
    //Ovo je zapravo promena svojstva Text labele koja se izvrsava
    //kada se dva puta klikne na formu
    label1.Text = "Kliknuli ste dva puta na formu!";
    
    //Ovo je zapravo promena boje teksta, koji se ispisuje u labeli,
    //koja se izvrsava kada se dva puta klikne na formu
    label1.ForeColor = Color.Red;

}

Када сачувамо измене можемо да покренемо програм. После покретања програма форма изгледа као на Слици 3.5. Када се мишем кликне на дугме форма ће изгледати као на Слици 3.6, а када се два пута кликне на форму, форма ће изгледати као што је приказано на Слици 3.7.

Слика 3.5. Изглед апликације након покретања програма Слика 3.6. Изглед апликације након клика на дугме Слика 3.7. Изглед апликације након двоструког клика на форму

Напомена: Уколико желимо да догађај Click придружимо некој компоненти, не морамо да два пута кликнемо на догађај Click у Properties Windows-у, већ кликнемо два пута на компоненту на форми којој желимо да придружимо тај догађај. Међутим, уколико кликнемо два пута на форму, онда ћемо форми придружити догађај Load.