Mi a következő C#-os probléma megoldása (magasszíntű kérdés)?
Képet akarok berakni picturebox-ba a következő módon
pic1_1.Image = MachinePoker.Properties.Resources.kep6;
Ez működik is ugye (mert resourcesbe már benne van aminek benne kell lennie) de dinamikussá akarom tenni úgy, hogy két különböző string együttese adja meg a kép nevét valahogy így;
string s1 = "kep";
string s2 = "6";
pic1_1.Image = MachinePoker.Properties.Resources.s1+s2;
Ez a megoldás persze nem működik, de ha valakinek van valami ötlete azt nagyon megköszönném.
Elore is bocs a helyesirasi hibakert telorol vok.
pic1_1.Image = MachinePoker.Properties.Resources.(s1+s2);
Probalgatni kellene bar sztem az a legegyszerubb modszer ha a programban osszes elofordulo kepet belerakod egy listaba majd azzal peldanyositod az objektumkkat
A legnagyobb gond itt az, hogy fogalmad nincs róla, hogy mit csinálsz.
A kep6 az a Resources nevü osztályodnak egy statikus property-je, amit az IDE automatikusan létrehoz neked, amikor hozzáadsz egy új objektumot a resources-hoz.
Property-kre az azonositójukkal kell hivatkozni a program szövegében, máshogy nem lehet(illetve ez nem teljesen igaz, de a Reflection-be ne menjünk bele, régen rossz, ha már ahhoz kell folyamodni)
Identifier expected az meg azt jelenti, hogy ha megadod egy osztály azonositóját, és utána teszel egy pontot, akkor azt egy, az osztályban definiált publikus azonositónak kell követnie. Legalább a nyelv szabályaival legyél(legyetek) tisztában, és akkor nem próbálkoztok ilyen hülyeségekkel.
A megoldás pedig a Resources.ResourceManager.GetObject() nevü függvénye, aminek egy string tipusú azonositót adhatsz át, és visszaadja az azonositóhoz tartozó object-et, amit még utána cast-olnod kell Image tipusra, hogy oda tudd adni a PictureBox-nak.
Tehát valahogy igy néz ki :
pic1_1.Image = (Image)MachinePoker.Properties.Resources.ResourceManager.GetObject(s1+s2);
18:03 jó megoldás, de ha mindenképpen a proprty-jét akarod egy osztálynak meghíni ilyen módon, akkor azt a typeof(osztály).InvokeMember(...) -el teheted meg
20:58 :
Igen, ezt a technológiát hivják reflection-nek.
Amit ha meglátok review alatt valakinek a kódjában, abban a pillanatban bukott is, irhatja át az egészet, mert felrúg minden objektum-orientáltsági és tervezési alapelvet.
Ha valaki a saját maga által irt osztályokat reflection-el kell b-zerálja, akkor ott valamit nagyon sz*rul tervezett meg. A .NET framework library-je meg azért eléggé átgondoltan össze van rakva ahhoz, hogy ne kelljen benne reflection-nel matatni.
Ilyesmiknek a használata nagyon ritkán lehet indokolt.
Amit én el tudok képzelni:
1. Plugin alapú alkalmazásoknál, ahol dll-ként lehet megirni egy plugin-t, és az app-ot meg valamilyen konfiggal beállitani, hogy melyik dll-eket töltse be.
2. Vagy esetleg olyan platformon kell alkalmazást fejleszteni, amin bizonyos dolgok csak reflection-el oldhatók meg, a platform kódja viszont nem módositható, és maga a platform sem lecserélhető.
3. Unit-teszt környezet készitésénél/teszt-automatizálásnál
Ez aztán a magas szintű kérdés...
Ez még nagyon az alap alatt van, egy perc google és egy kis logika...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!