Postoje dva osnovna načina da naš program „zna” kada je korisnik reagovao:

  • Jedan način je očitavanje stanja miša i tastature. Iz programa možemo da pitamo koja je trenutna pozicija miša, da li je neki taster trenutno pritisnut i slično.

  • Drugi način je korišćenje događaja. Moguće je reagovati na doslovno svaku akciju korisnika, kao što je pritisak na taster miša ili tastature, otpuštanje tastera, pomeranje miša i slično. - Ovo smo najčešće koristili do sada.



Očitavanje tastera i pozicije miša - događaj

Pozicija miša može se pratiti koristeći događaj MouseMove. U narednom zadatku ćemo prikazati trenutne koordinate pozicije miša u okviru forme.


Zadatak1: Očitavanje pozicije miša uz korišćenje događaja MouseMove.


  • Na formu postaviti dve labele u kojima će da se ispisuje pozicija miša, na dva različita načina (dajte joj naziv lblPozicija1, lblPozicija2)
  • Među akcijama za formu pronaći MouseMove i tamo uraditi dvoklik miša - generisaće se skeleton programskog koda u koji se samo upisuje šta će se desiti ako se miš pomera na formi
  • Cilj je da se u tekstu labele ispisuje trenutna pozicija miša na formi:
    • lblPozicija1.Text = "pozicija miša je :" + e.X + ", "+e.Y;         // prvi način
    • lblpozicija2.Text = String.Format("X: {0}, Y: {1}", e.X, e.Y);   // drugi način

Objašnjenje: 

Ako se pogleda prvi red finkcije koja je generisana za događaj MouseMove, videćete da piše: "private void Form1_MouseMove(object sender, MouseEventArgs e)"

Ova metoda prima dva parametra:

  • sender: Objekat koji je pokrenuo događaj (ovde je to forma).
  • MouseEventArgs e: Objekat koji sadrži informacije o trenutnom stanju miša.

Kada miš promeni poziciju (npr. pomeri se u okviru forme), u Windows Forms aplikaciji se generiše objekat MouseEventArgs koji sadrži informacije o trenutnoj poziciji piša i statusu tastera miša. Informacije koje su nam odatle potrebne su:

  • e.X i e.Y: Koordinate miša u odnosu na gornji levi ugao kontrole ili forme.
  • e.Button: Indikacija da li je neki taster miša pritisnut dok se miš pomera (levo, desno, srednje dugme).
  • e.Delta: Vrednost koja ukazuje na promenu rotacije točkića miša (koristi se za događaje poput MouseWheel).

Odavde se vidi da je samo potrebno u tekst labele na neki način uključiti e.X i e.Y.

Dodatni zadatak: Na osnovu prethodnog objašnjenja u formu uneti još jednu labelu pomoću koje će da se prikazuje da li je pritisnut taster miša (i koji od njih je pritisnut) u toku kretanja miša.



Očitavanje pozicije miša - programski

Programski očitavanje tastera i pozicije miša u C# se može izvesti pomoću ugrađenih klasa iz System.Windows.Forms

  • Za poziciju miša se koristi klasa Cursor, koja omogućava očitavanje trenutne pozicije miša na ekranu.
  • Za očitavanje stanja tastera miša se koristi enumeracija MouseButtons, koja pokazuje koje dugme je trenutno pritisnuto.

Ovo se koristi kada nam je potrebno da se očita pozicija miša i stanje njegovih tastera u nekom određenom trenutku, a ako želimo da se to radi u kontinuitetu (stalno / periodično) onda se sve to kombinuje sa tajmerom za redovno očitavanje.

private void Timer_Tick(object sender, EventArgs e)
{
    // Očitavanje pozicije miša u odnosu na ekran
    var pozicijaMisa = Cursor.Position;
    lblPozicijaMisa.Text = String.Format("X: {0}, Y: {1}", pozicijaMisa.X, pozicijaMisa.Y);
}

Zadatak2: u dodatnoj formi vršiti periodično očitavanje pozicije miša



Očitavanje stanja tastera miša - programski


Ispitivanje vršimo poredeći vrednost svojstva MouseButtons sa odgovarajućim konstantama.

Na primer, sledećom naredbom se proverava da li je pritisnuto levo dugme miša (pri tome ostala dugmad mogu, a ne moraju biti pritisnuta u isto vreme):

if ((MouseButtons & MouseButtons.Left) > 0)
    // ...

Konstante koje odgovaraju pojedinim dugmetima miša su redom:

  • MouseButtons.Left za levo dugme

  • MouseButtons.Middle za srednje dugme (na mnogim miševima ovo je zapravo točkić, koji može i da se pritisne kao dugme)

  • MouseButtons.Right za desno dugme

Vrednosti svojstva MouseButtons su kombinacije ovih konstanti i zato datom if naredbom mi u stvari proveravamo da li svojstvo MouseButtons „sadrži” konstantu MouseButtons.Left. Jednostavniji uslov MouseButtons == MouseButtons.Left bi proveravao da li je trenutno pritisnuto isključivo levo dugme i nijedno više, što najčešće nije ono što nam treba. Na primer, ako je istovremeno pritisnuto levo i desno dugme, uslov naveden u if naredbi bi bio ispunjen, a ovaj drugi ne.


Zadatak2a: u istoj dodatnoj formi vršiti periodično očitavanje tastera miša


Zadatak3: dodati još jednu formu sa događajem MouseDown

Ako se pritisne levi taster miša da se boja labele promeni u plavu, a ako se pritisne desni taster miša da se boja labele promeni u crvenu

U svakom slučaju, da se u labeli ispisuje koji je taster miša pritisnut

private void Form3_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        Label1.Text = "Pritisnut je levi taster miša.";

// *** dalje nastavite sami



Očitavanje tastature

Kada je potrebno da proverimo da li korisnik drži neki od tastera na tastaturi pritisnut, jedan od jednostavnijih načina je da  koristimo događaj KeyDown: Potražite ga u događajima za Form1 i dvoklikom generišite događaj:

  private void Form3_KeyDown(object sender, KeyEventArgs e)
        {
            label2.Text = e.KeyCode.ToString();
    
            if (e.KeyCode.ToString() == "L")
                Application.Exit();
        }

U ovom slučaju će se za pritisnut taster prikazati koji je u label2.

Ako je pritisnut taster L - izlazi se iz aplikacije.




Na Petlji postoje lekcije koje možemo da iskoristimo....

 Zadatak 5: zadatak sa prethodnog linka -  OPCIONO -

 Crveni , Zeleni i plavi taster - radimo prvi deo zadatka, u kojem se klikom na levi taster miša dodaje crvena komponenta na pozadinsku boju forme, klikom na točkić se dodaje zelena komponenta na pozadinsku boju forme, a klikom na desni taster miša sa dodaje plava komponenta na pozadinsku boju forme. Ako se prestane sa klikom, odgovarajuće komponente boje pozadine se smanjuju.

Da se podsetimo: boja je predstavljena sa RGB - red, green, blue, i svaka komponenta može imati vrednost od 0 do 255. Ako su sve tri 0, onda je ukupna boja crna, a ako su sve tri 255 onda je ukupna boja bela. Sve ostale boje su negde "između".

Slobodno upotrebite kod koji se nalazi na pomenutoj stranici smile

Za one koji žele da znaju malčice više:  Kod kuće pokušajte da uredite i još neki primera sa te stranice.



Direktni linkovi ka Petlji i zanimljivim zadacima:


Last modified: Tuesday, 19 November 2024, 10:29 PM