17.10. Glavni meni
Glavni meni
Glavni meni u Windows Forms aplikacijama obično se prikazuje kao traka sa izborima na vrhu prozora aplikacije. Ovaj meni sadrži stavke koje omogućavaju korisnicima pristup osnovnim funkcijama aplikacije. Klikom na stavku u glavnom meniju korisnik može da izvrši neku akciju.
Glavni meni se može kreirati koristeći MenuStrip kontrolu, bilo iz programskog koda, bilo prevlačenjem iz ToolBox-a.
Kreiranje menija
Najlakši način kreiranja glavnog menija je prevlačenje kontrole MenuStrip sa Toolbox-a na formu (pazite: u nekim verzijama je to MainMenu). Time je izvršeno grafičko kreiranje objekta klase MenuStrip, a odgovarajući objekat ima naziv menuStrip1.
Kada kliknete na liniju menija, možete da kreirate tekst oblasti za unos stavki i podstavki menija i to možete da menjate po potrebi. Svaka stavka menija ima odgovarajući Text property kojim se definiše šta piše na toj stavci menija i odgovarajući Name property kojim se definiše naziv objekta. Dvoklikom na stavku menija, kreira se šablon metode koja će da se izvrši ako se klikne na tu stavku.
U nastavku su, iza dugmića, video snimci sa Youtube-a koji će da posluže kao inspiracija za kreiranje aplikacije i svega u njoj. Nakon toga je teorijski deo - da se sve lepo objasni. Na kraju lekcije je video snimak časa iz neke od prethodnih školskih godina (2020).
VEŽBA - Video br. 1: (sa Youtube-a) u kojem se, sem kreiranja menija, prikazuje i kako da namestite šta se dešava ako kliknete na neku stavku: prikaži / sakrij video 1
Osim teksta, stavka menija može da ima sličicu (eng. Icon) i neku definisanu skraćenicu sa tastature (eng. Shortcut). Kao primer je npr. stavka menija “File”. Njena skraćenica je najčešće Alt+F, što znači da se ova opcija može aktivirati istovremenim pritiskom na ove tastere.
Napomena: Kombinacija tastera može da se bira, pri čemu treba da se vodi računa o preklapanju i konzistentnosti tj. ako u više menija u hijerarhiji menija imamo istu opciju onda bi i skraćenica trebala da bude ista.
VEŽBA - Video br. 2: Sledeći video (sa Youtube-a takođe) prikazuje kako da se postave slike na mesto stavki u meniju: prikaži / sakrij video 2
VEŽBA - Video br. 3: U nastavku je kratak video (sa Youtube-a) gde se pokazuje kako se mogu izmeniti neka od podešavanja na meniju, kao i da se pokrenu neki procesi (programi) koji postoje na Windows OS-u: prikaži / sakrij video 3
VEŽBA - Video br. 4: Kako da se iz menija otvori nova forma i kako da se ispiše poruka za izlazak iz programa, uz korišćenje poruka kao u prethodnoj lekciji prikaži / sakrij video 4
UKRATKO: U nastavku su ukratko navedeni koraci:
-
Otvoriti Visual Studio i kreirati novi Windows Forms projekat:
- Pokrenutii Visual Studio.
- Odabrati File > New > Project.
- Izabrati Windows Forms App (.NET Framework), postaviti naziv projekta i lokaciju gde se čuva.
-
Dodavanje MenuStrip kontrole:
- U Toolbox prozoru (obično sa leve strane), pronaći MenuStrip kontrolu.
- Prevući MenuStrip na formu. Nakon toga je na vrhu forme vidljiva traka menija.
-
Dodavanje stavki menija:
- Kliknuti na MenuStrip da bi ga izabrali.
- U Properties prozoru, može da se promeni naziv menija, po potrebi.
- Za dodavanje stavki menija, dovoljno je da se samo jednostavno klikne na MenuStrip na formi i započne unos.
- Na primer, može da se doda stavka "File". Kliknuti na praznu stavku u meniju i upisati "File".
- Da bi se dodale podstavke (npr. "Open", "Save"), postaviti kursor na "File", pritisnuti Enter i nastaviti sa unošenjem naziva podstavke ispod..
-
Dodavanje akcija na stavke menija:
- Da bi dodao akcije kada korisnik klikne na stavku menija, moraš kreirati događaj (event handler).
- Dvoklik na stavku za koju se kreira događaj ili
- Desni klikni na stavku menija (npr. "Open") i izabrat Properties.
- U Properties prozoru, kliknuti na ikonu munje (događaji).
- Pronaći događaj Click i dvostruko kliknuti u prazno polje pored njega. Ovo će automatski kreirati metodu u programskom kodu.
-
Pisanje koda za događaj:
- U novoj metodi može da se doda programski kod za ono što treba da se desi kada korisnik klikne na tu stavku menija.
Objašnjenje (teorija):
Meniji se u Windows aplikacijama koriste kao jedan od načina za interakciju sa korisnikom, odnosno, kao način na koji će korisnik da aktivira pojedine funkcionalnosti aplikacije. Obično se nalazi pri vrhu forme, ali to ne mora biti uvek slučaj. U pojedinim aplikacijama se može postaviti na dno ekrana, pa čak i po vertikali ako je to iz nekog razloga najbolji položaj.
Dodatno, moguće je i dinamički dodavati ili sakrivati stavke, čime meni prati korisnika u zavisnosti od akcija koje se događaju u aplikaciji. Sakrivanjem stavki se onemogućuje da korisnik aplikacije aktivira neku opciju koja nije podržana za dato stanje programa. Neaktivne opcije u meniju se razlikuju od aktivnih po tome što im je naziv ispisan svetlijom bojom (svetlo sivo). O tome da li je opcija aktivna ili neaktivna treba da vodi računa programer! Ne postoji automatski mehanizam koji to radi, što znači da sve treba da se realizuje u kodu.
NAPOMENA: Pitanje dizajna GUI-ja i to pre svega opcija koje se pojavljuju u menijima u pojedinim fazama korišćenja aplikacije je izuzetno važno. Izbor da li će se neaktivna stavka u meniju prikazivati kao stavka u stanju disable ili se pak uopšte neće videti je jedna od odluka koju treba da donese projektant softvera. Ako se stavka ne vidi onda su meniji kraći i pregledniji. Ipak, ponekad je u nekim menijima dobro da se vidi šta sve postoji kao mogućnost od opcija tj. stavki, iako neke u tom trenutku nisu aktivne.
Ako GUI nije dobro odrađen, ako nisu na ispravan način ispraćene sve situacije ili scenarija korišćenja u kojima pojedine stavke menija treba da budu aktivne ili neaktivne, može da se desi da dođe do neispravnog rada tj. do "pucanja" aplikacije ili zbunjujućeg ponašanja. To je zbog toga što će korisnik možda da zahteva neku akciju koja nije logična za dato stanje aplikacije, a u meniju je takva akcija moguća. Stoga se ovom problemu prilikom projektovanja softvera posvećuje dosta pažnje.
**
U nekim primerima koje smo radili na časovima, kreiranje svih novih formi je vršeno tako što smo dodavali novo dugme i pojavljivanje neke forme vezivali za događaj Click na odgovarajuće dugme. Kako broj formi može da raste, nije praktično da dodajemo nove dugmiće za pojavu svake nove forme jer ćemo morati da povećavamo veličinu početne forme. Istu funkcionalnost možemo postići na mnogo elegantniji način tako što ćemo na našu početnu formu postaviti kontrolu za meni. Ova kontrola se postavlja na formu na sledeći način:
- U paleti sa alatkama (eng. Toolbox) pronađite sekciju Menus & Toolbars.
- U okviru nje pronađite kontrolu MenuStrip koja daje potrebne funkcionalnosti menija na formi.
- Prevucite ovu kontrolu i pustite je na formu - nije važno gde, jer se meni automatski pozicionira na vrh forme, a sama kontrola u specijalnom prozoru ispod forme
Da biste kreirali meni, prvo morate da kliknete na kontrolu na dnu forme koja je dobila inicijalno ime menuStrip1. Tada se u dizajneru prikazuje meni na vrhu forme. Videćete tekst Type Here koji dovoljno govori sam za sebe - očekuje se unos nekog teksta. Tamo gde piše Type Here unesite ono šta hoćete da piše u meniju.
Čim počnete da kucate odmah će se ispod i desno od ove stavke otvoriti mogućnost za dalji unos stavki menija, horizontalno i vertikalno.
Ako žeite da stavke iz menija imaju pridružen tzv hot key tj. skraćenicu, a ne želite da to birate iz Propertija, možete da ispred karaktera koji treba da bude hot key ukucate karakter &. Tada će to slovo ili broj uz pritisnut Alt aktivirati tu stavku iz menija. Na primer, ako želimo da hot key za meni File bude kombinacija Alt+F jednostavno treba ukucati tekst &File. Karakter & se ne prikazuje, već je ispisano samo File. Podvučeno slovo označava skraćenicu sa tastature.
Zanimljivost: Ako za tekst stavke unesete samo znak – (minus), on ima specijalno značenje: u meniju se prikazuje horizontalni separator (horizontalna linija). Ovo je izuzetno korisno kada treba vizuelno razdvojiti različite grupe funkcionalnosti u okviru vertikalnog menija. Stoga je ova mogućnost ujedno i jedna od preporuka za kreiranje kvalitetnog GUI-a.
Programiranje menija :
Svaku stavku menija je najbolje "tretirati" kao komandno dugme. Programiranje se vrši tako što se zapravo programira Click događaj stavke menija.
Svaka stavka menija ima svoj skup svojstava koja su vidljiva u standardnom prozoru za prikaz svojstava objekta - Properties prozoru.
Kao i svaka druga kontrola, ima svojstvo Name koje se automatski generiše. Svojstvo Text definiše tekst stavke menija i njega smo podešavali iz dizajnera. Sa duplim klikom na stavku menija se otvara programski kod Click događaja u prozoru za pisanje koda. Želimo da se, kada korisnik klikne na tu stavku menija, izvrši ono što se isprogramira u tom programskom kodu. Na primer, izlazak iz programa se postiže pozivom metoda Exit objekta Application tj.:
private void krajRadaToolStripMenuItem1_Click(object sender, EventArgs e)
{
Application.Exit();
}
Application je referenca na aplikaciju koju kreiramo. Ovaj objekat poseduje metod Exit koji izvršava bezuslovni prekid rada aplikacije i oslobađa sve resurse koje je aplikacija zauzela (memoriju, datoteke, baze podataka i tako dalje...).
Kako se još mogu postaviti skraćenice:
Postavlja se pitanje da li je moguće na drugi način definisati skraćenicu sa tastature koja će, na primer, direktno aktivirati neku stavku?
Naravno da je moguće, čak se može definisati kombinacija bilo kog specijalnog tastera (Control, Alt ili Shift) i običnog karaktera. Takođe se mogu koristiti i funkcijski i drugi specijalni karakteri sa tastature.
To se tadi tako što se u design modu jednim klikom miša izabere u meniju neka od stavki, a potom se u prozoru svojstava pronađe svojstvo ShortcutKeys. Otvorite padajuću listu pored ovog svojstva i trebalo bi odmah sve da bude jasno. Ako na primer označite (čekirate) Alt i iz padajuće liste izaberite slovo K , tada će kombinacija Alt+K pokrenuti stavku menija. Obratite pažnju i da se uz stavku menija prikazuje i njena skraćenica. Ovo se podešava svojstvom ShowShortcutKeys koje može imati vrednosti True (tačno ili da) ili False (netačno ili ne).
Kako dodati slike u naš meni:
Svaka stavka menija može imati i sličicu tj. ikonu (eng. Icon) koja doprinosi lepšem i razumljivijem korisničkom interfejsu. Sličice koje se koriste za ovu namenu su najčešće u bmp ili jpeg formatu, dimenzija 16x16 piksela (mada može u druga veličina, 32x32, a u nekim verzijama je max 50x50). Na Internetu može da se nađe veliki broj kolekcija sličica za besplatno preuzimanje. Te sličice mogu da se lako naprave korišćenjem nekog od programa za kreiranje ikona (preporuka je da probate da kreirate par ikona. Rad sa ovim programima je izuzetno jednostavan ali sam proces osmišljavanja tj. dizajniranja ikone je izuzetno težak!!! Izuzetno lako prevalimo preko usta rečenicu "Uf što su ružne ikone" ali je teško napraviti kvalitetne!). Pomoću svojstva Image može da se izabere slika sa računara i da se dodeli stavci menija. Klikom na malo dugme pored ovog svojstva se dobija dijalog za dodavanje resursa aplikaciji. Osim slika, to mogu biti i zvučne datoteke, animacije kao i druge binarne datoteke koje se koriste u aplikaciji. Klikom na dugme Import i sa diska računara se bira slika koja je prethodno pripremljena. Na kraju ide klik na dugme „OK“. Ako je slika veća od maksimuma koji je podržan, biće automatski skalirana na tu veličinu.
Zanimljivost: Nekada je korisna i mogućnost da se pored svake stavke menija nalazi znak za overu (eng. Check). Svojstvo Checked koje može imati vrednosti True ili False obezbeđuje upravo ovo. Ako je ovo svojstvo postavljeno na True, tada se sa leve strane stavke pojavljuje znak za overu. U praksi se znak za overu prikazuje ili ne zavisno od logike korišćenja aplikacije i akcija korisnika tj. trenutnog stanja aplikacije.
Na primer, linija koda:
FormaXToolStripMenuItem.Checked = true;
će za vreme izvršavanja programa postaviti znak za overu pored FormaX stavke menija.
Takođe, u praksi se često koristi dinamičko prikazivanje ili skrivanje stavke menija ili cele grupe, opet zavisno od logike aplikacije. Za ovo imamo dve mogućnosti, odnosno svojstva:
- Svojstvo Enabled koje, kada je postavljeno na False, prikazuje stavku menija u sivoj boji i korisnik ne može da je aktivira (klikne na nju). Ovo je korisno ako želimo da korisnik zna da stavka menija postoji, ali trenutno nije dostupna
- Restriktivnije svojstvo Visible (koje imaju sve kontrole) postavljeno na False čini da se stavka menija uopšte ne vidi u situacijama kada ne treba da bude dostupna korisniku.
- Napomena: Postavljenjem osobine Visible na False, kontrola i dalje postoji, ali se trenutno ne vidi tj. ne prikazuje. Postavljanjejm ove osobine na True, kontrola opet postaje vidljiva. Osobina Visible se veoma često eksploatiše da bi se postigli razni efekti. Na primer, moguće je postaviti dve kontrole jednu preko druge i naizmeničnim postavljanjem njihovih osobina Visible na True odnosno False omogućiti da se naizmenično prikazuju.
Video snimak vežbe sa časa (iz 2020)
Kreiranje projekta (Windows Forms Application) i rad sa menijima i sa više formi - snimak: