[ Igor Gajic @ 04.12.2008. 10:17 ] @

Potrebno mi je da preko imena stavke u meniju na formi promenim promenljivu u stavki.

Tj ako mi je dat meni, koji sadrzi redom drop-down stavke "O programu", "Help","Test",... Da preko imena
stavke, helpToolStripMenuItem, promenim vrednost promenljive "Visible".


I naravno sve to preko refleksije.


Moguce je odraditi preko iteracije kroz stavke menija, ali mi je to neprakticno jer neke stavke imaju vise nivoa, pa bih morao koristiti rekurziju, sto bi mi bilo jako neprakticno. Pretpostavljam da se preko refleksije resavau 2-3 reda.
[ bunker @ 04.12.2008. 10:56 ] @
Ja te uopste nisam razumeo. Da promenis svojstvo "Visible" na cemu?

[ Igor Gajic @ 04.12.2008. 11:12 ] @
Mozda je bolje da primer i sliku.



Pitanje:

Kako preko refleksije promeniti vrednost Visible na "About Mozila Firefox" ako imam samo ime te promenljive,
tj. aboutToolStripItem. (string)


[ bunker @ 04.12.2008. 11:28 ] @
Hoces da promenis Visible te stavke menija?

Ako je tako
Code:
this.Menu.MenuItems[aboutToolStripItem].Visible = false 


Ako je ovo, zasto refleksijom?
[ Igor Gajic @ 04.12.2008. 11:44 ] @
Snimam u bazu podatke vezane za vidljivost menija, svaki korisnik ima privilegije i na osnovu njih ima pristup opcijama programa. E sad da bih sakrio stavke menija koristim imena promenljivih.


Na tvoj nacin, koliko sam sad isprobao, mogu tako pristupiti samo pocetnim stavkama, tj. File,Edit,View,....


Inace glavni meni je tipa MenuStrip. I ima samo clan Items. Nema clan MenuItems.

[ Igor Gajic @ 04.12.2008. 13:28 ] @
Da odgovorim samom sebi:

Code:


 ((ToolStripMenuItem)typeof(GlavnaForma).GetField(opcija, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this)).Visible = false;

[ MarkoBalkan @ 04.12.2008. 14:58 ] @
Citat:
Igor Gajic: Snimam u bazu podatke vezane za vidljivost menija, svaki korisnik ima privilegije i na osnovu njih ima pristup opcijama programa. E sad da bih sakrio stavke menija koristim imena promenljivih.


Na tvoj nacin, koliko sam sad isprobao, mogu tako pristupiti samo pocetnim stavkama, tj. File,Edit,View,....


Inace glavni meni je tipa MenuStrip. I ima samo clan Items. Nema clan MenuItems.


za svakog korisnika u bazi napravi privilegije za stavke menu-a, i sa običnim "selectom" učitaš stavke i kreiraš menu.

kad ti netko klikne na stavku proslijediš string, u bazu stavime ime dll file i ime forme koja se nalazi u tom dll file-u.

proslijediš string učitaš dll te sve objekte i pozoveš formu koja je dodana u bazi za određenu stavku.
[ Igor Gajic @ 04.12.2008. 15:12 ] @
@MarkoBalkan

Zanimljivo. Na taj nacin se onda dobija potpuno modularna aplikacija. Tj. korisnik moze da kupi delove programa(DLL) koji mu omogucuju odredjenu funkcionalnost i ako ima taj dll onda mu pokaze meni za te opcije i ima potpunu funkcionalnost...
[ MarkoBalkan @ 04.12.2008. 19:31 ] @
recimo imaš tablicu menu u bazi, sa popisom i strukturom.


onda ti treba tablica, korisnici,
pa tablica privilegije
pa tablica sa popisom dll fileova i formi (1 ili 2 tablice)

i nakraju tablice koje sadrže ono što ti treba.

sad je MS izdao scsf (smart client software ....) upravo za ovakvu namjenu, kažem svaki može koristiti svoju ideju.
dll fileovi se pokupi kad korisnik klikne na neku stavku u menu-u i time preko refleksije pozove dll i pozove formu iz dll file-a.



drugi način je da posebno napraviš dll file-ove i ubaciš kao reference, sve ostalo isto, ali onda ti ne treba refleksija.



recimo kod pythona nemaš refleksije imaš ali za takve stvrai se ne koristi jer ne treba.

dovoljno je samo imports modula i to je to i imaš pristup onome što ti treba.

a kod .net, prvo referenca pa onda još imports.