C# & Resources

poruka: 10
|
čitano: 2.191
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
C# & Resources

Kada u C# windows aplikaciji želim dodati ikonu na Button, prvo je dodam u resource od projekta a onda je u dizajneru forme preko propertija Image pridjelim tom botunu. To sve radi savršeno i bez problema. Ali (uvijek ima taj ali) problem je što u aplikaciji imam više projekata i za svaki od tih projekata moram ručno dodavati ikone, što vodi do bespotrebnog kopiranja istih ikona u više projekata.

Ono što bih želio je da mogu sve ikone ubacit u jedan dll (assembly), ali da ih još uvijek mogu pridjelivati preko dizajnera formi.

Uspio sam naći alat koji omogućuje da se resources vide kao public (link je http://sites.google.com/site/dmytrokryvko/) ali još uvijek ne mogu vidjeti te ikone u dizajneru, jedino u kodu.

 

Ako neko zna nešto o ovom pliz help..

Checked-out since 1983
 
0 0 hvala 0
17 godina
protjeran
offline
C# & Resources

Nisam uopće siguran da li se mogu vanjski (dll) resursi vidjeti u desing-timeu, jer bi ih prethodno bilo potrebno nekako učitati. Jedino ako imaš komponentu koja ti može automatski ponuditi popis resursa koji se nalazi u dll-u pa da si preko imena (ili ID-a) resursa izabereš nekog od njih.

 

Općenito, najbolje i jest naknadno tj. dinamički čitati resurs iz dll-a jer na taj način svaki put evidentiraš moguću promjenu tog resursa i ne moraš ga zasebno kopirati u druge projekte (aplikacije) već samo "pozivati" tj. učitati iz dll-a. Dok, ako ćeš ga direktno koristiti u desing-time modu onda si zapravo kopirao resurs u EXE, a tada taj dll nije niti potreban.

 

Drugim riječima, vanjski (dll) resursi se koriste u vrijeme rada aplikacije kada se prvo učita resurs iz dll-a, dok resursi koji se nalaze u EXE se ne trebaju zasebno učitavati pa su stoga dostupni i u design-timeu tj. prilikom izrade forme.

Poruka je uređivana zadnji put pet 5.3.2010 13:59 (Tracer).
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
RE: C# & Resources
Tracer kaže...

Jedino ako imaš komponentu koja ti može automatski ponuditi popis resursa koji se nalazi u dll-u pa da si preko imena (ili ID-a) resursa izabereš nekog od njih.

U thread-u na nekom forumu neki lik je uspio pomoću neke komponente registrirati vanjski dll kao resource. Naravno nisam spremio bookmak na stranicu Viče(history isto nemam) tako da ne znam koju je komponentu koristio, ali izgleda da je moguće koristiti vanjski dll kao resource.

Checked-out since 1983
17 godina
protjeran
offline
RE: C# & Resources
st.srki kaže...
Tracer kaže...

Jedino ako imaš komponentu koja ti može automatski ponuditi popis resursa koji se nalazi u dll-u pa da si preko imena (ili ID-a) resursa izabereš nekog od njih.

U thread-u na nekom forumu neki lik je uspio pomoću neke komponente registrirati vanjski dll kao resource. Naravno nisam spremio bookmak na stranicu Viče(history isto nemam) tako da ne znam koju je komponentu koristio, ali izgleda da je moguće koristiti vanjski dll kao resource.

Registracija dll-a je moguća samo ako su u njemu ActiveX (COM) komponente, a ti govoriš o običnom dll-u koji predstavlja skladište resursa. Obični dll obično zahtjeva povezivanje preko nekog handle (instance) objekta, te na taj način aplikacija dinamički učitava i koristi resurse.

 

Ako je riječ o vanjskim resursima po meni je nužno učitati ih dinamički, jer ako se neka bmp slika nalazi na formi u design-timeu onda je ona zapravo resurs koji se sprema u EXE,  i neće se više naknadno učitavati iz DLL-a, pa time i daj DLL gubi svoj smisao i svrhu.

Poruka je uređivana zadnji put pet 5.3.2010 16:02 (Tracer).
17 godina
protjeran
offline
C# & Resources

Ako se ne varam, može napraviti jedan resx file i u ostale projekte ih dodati kao ShortCut, mislim da bi to trebalo riješiti tvoj problem

Programko http://programko.bloger.hr
 
0 0 hvala 0
17 godina
neaktivan
offline
RE: C# & Resources
Tracer kaže...
st.srki kaže...
Tracer kaže...

Jedino ako imaš komponentu koja ti može automatski ponuditi popis resursa koji se nalazi u dll-u pa da si preko imena (ili ID-a) resursa izabereš nekog od njih.

U thread-u na nekom forumu neki lik je uspio pomoću neke komponente registrirati vanjski dll kao resource. Naravno nisam spremio bookmak na stranicu Viče(history isto nemam) tako da ne znam koju je komponentu koristio, ali izgleda da je moguće koristiti vanjski dll kao resource.

Registracija dll-a je moguća samo ako su u njemu ActiveX (COM) komponente, a ti govoriš o običnom dll-u koji predstavlja skladište resursa. Obični dll obično zahtjeva povezivanje preko nekog handle (instance) objekta, te na taj način aplikacija dinamički učitava i koristi resurse.

 

Ako je riječ o vanjskim resursima po meni je nužno učitati ih dinamički, jer ako se neka bmp slika nalazi na formi u design-timeu onda je ona zapravo resurs koji se sprema u EXE,  i neće se više naknadno učitavati iz DLL-a, pa time i daj DLL gubi svoj smisao i svrhu.

 

Svi projekti na kojima radim su u biti dll-ovi, osim glavnog root projekta koji je exe, i koji je u biti aplikacija koja učitava svaki od ovih dll-ova kad mu zatreba. Svi to dll-ovi imaju u sebi iste ikone, koje su "embeded resource" sta znaci da su spremljene u dll.

S obzirom da u designer.cs file-u od windows formi stoji da se slike iz resursa ucitavaju kao "this.SomeButton.Image = global::MyNamespace.Properties.Resources.SomeImage;", ne vidim zasto bi bilo drugacije ako bi se to isto radilo samo sto bi referenca (MyNamespace) bila drugi projekt (dll koji sadrzi samo ikone).

 

 

Programko kaže...

Ako se ne varam, može napraviti jedan resx file i u ostale projekte ih dodati kao ShortCut, mislim da bi to trebalo riješiti tvoj problem

 

Ako pod shortcut misliš da dodam referencu onda sam to sam već napravio, ali u dizajneru svejedno vidim samo lokalne resurse.

 

Checked-out since 1983
17 godina
protjeran
offline
C# & Resources

Ne ne mislim na to nego U Solution Exploreru, klikni desnom na Add existing Item, odaberi resx u nekom drugom projektu, I kod Add buttona imaš DropDown Otvori ga, i odaberi Like Link

Poruka je uređivana zadnji put pet 5.3.2010 20:07 (Programko).
 
0 0 hvala 0
17 godina
neaktivan
offline
RE: C# & Resources

Prvi put vidim ovo Add as link, al ovo stvarno radi. Jedini je problem ako se doda novi resurs, onda moram izbrisati i ponovno dodati link, ali nije neki problem Osmijeh.

 

Stari, puno se zahvaljujem.

Checked-out since 1983
Poruka je uređivana zadnji put pon 8.3.2010 13:52 (st.srki).
17 godina
neaktivan
offline
C# & Resources

Ipak sve nije tako savrseno kako izgleda. Sve radi dobro ako dodam link na *.resx u samo jedan projekt. Cim dodam link u bilo koji drugi projekt, onaj link iz prvog projekta više ne radi. Cini se da u trenutku dodavanja linka u neki projekt, namespace od DLL-a u kojem se nalaze resursi promijeni se u namespace od projekta u kojem je link dodan. tako da svaki put kad se link doda u bilo koji projekt, namespace se promijeni u taj isti namespace i nista drugo ne radi!

 

Šteta!! Mršti se

Checked-out since 1983
 
0 0 hvala 0
17 godina
protjeran
offline
C# & Resources

Nije li to problem strongly Typed Resursa, napravi ih da ne budu strongli. Tu sinhronizaciju možeš riješiti i kroz Revision Source Sistem software npr. Subverzion, a u najgorem slučaju možeš napisati PowerShell skriptu koja ti odradi sinhronizaciju 

Programko http://programko.bloger.hr
 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice