Lehetséges egy objektumra egy string-el hivatkozni?

Lehetséges egy objektumra egy string-el hivatkozni?
2018-06-14T17:29:22+02:00
2018-06-15T13:36:11+02:00
2022-10-15T21:41:39+02:00
krisztian999tr
Sziasztok!
Van egy program ami egy CSV dokumentum beolvasása után, hivatkozásokat kap letöltött képekre, amiket egy tömbbe rendez. Lehetséges-e az, hogyha van sok azonos tulajdonságú objektumom akkor az összesre az azonos értéket egy for ciklussal állítsam be? Gondolok itt arra, hogy a képek elölnézetet mutató image objektumok ciklussal kapják meg az értéket a tömbtől. 

(A példában minden kép ugyanazt az értéket kapja. Ez az eljárás arra az esetre, ha ki akarjuk üríteni az elemeket).

Jelenleg így dolgozom:

private void ClearAllGridItems() { this.Dispatcher.Invoke(() => { //A képek... BitmapImage NoImage = new BitmapImage(new Uri("Resources/noContent.png", UriKind.Relative)); GridItem1_image.Source = NoImage; GridItem1_image1.Source = NoImage; GridItem1_image2.Source = NoImage; GridItem1_image3.Source = NoImage; GridItem1_image4.Source = NoImage; GridItem1_image5.Source = NoImage; GridItem1_image6.Source = NoImage; GridItem1_image7.Source = NoImage; GridItem1_image8.Source = NoImage; GridItem1_image9.Source = NoImage; GridItem1_image10.Source = NoImage; GridItem1_image11.Source = NoImage; GridItem1_image12.Source = NoImage; GridItem1_image13.Source = NoImage; GridItem1_image14.Source = NoImage; GridItem1_image15.Source = NoImage; GridItem1_image16.Source = NoImage; GridItem1_image17.Source = NoImage; GridItem1_image18.Source = NoImage; GridItem1_image19.Source = NoImage; }); }


És ehelyett gondolok például valami ilyesmire: 

for(int i = 0; i<n; i++){ string file = "GridItem1_image" + Convert.ToString(i); Beallitas(file).Source = NoImage; }
Mutasd a teljes hozzászólást!
Szia!

És ha lesz 1000 képed, akkor 1000 helyen fogod átírni? És ha 10000? 

Nagyon rossz ez a megoldás!

Használj listát:

List(GridItem1_imag) list = new List(GridItem1_image);
töltsd fel az egyes GridItem-eiddel, valahogy így:

list.add(...)-al.
majd egy foreach-el menj végig az összesen.

foreach(var elem in list) { elem.Source = SetImage; elem.Content = GridLabel; }
Sok sikert!
Mutasd a teljes hozzászólást!

  • Inkább legyen egy GridItem1_image[] tömb, 20 elemmel.
    Mutasd a teljes hozzászólást!
  • Ez is jó megoldásnak tűnik, de tegnap óta megoldottam úgy, hogy írtam rá egy különálló függvényt, amire már egy for ciklus is tud használni:

    public void SetGridItems(int number, string imageURI, string GridLabel) { this.Dispatcher.Invoke(() => { BitmapImage SetImage = new BitmapImage(new Uri("./App Data/itemThumbnails/" + imageURI, UriKind.Relative)); switch (number) { case 1: GridItem1_image.Source = SetImage; GridItem1_label.Content = GridLabel; break; case 2: GridItem1_image1.Source = SetImage; GridItem1_label1.Content = GridLabel; break; } //stb... }); }
    Mutasd a teljes hozzászólást!
  • Ezt nagyon gyorsan felejtsd el és vegyél elő egy tankönyvet.
    Ha egy kódrészletet kétszer egymás után kell írnod (minimális módosítással), az gyanús. Ha háromszor vagy többször, az tervezési hiba.
    Mutasd a teljes hozzászólást!
  • Szia!

    És ha lesz 1000 képed, akkor 1000 helyen fogod átírni? És ha 10000? 

    Nagyon rossz ez a megoldás!

    Használj listát:

    List(GridItem1_imag) list = new List(GridItem1_image);
    töltsd fel az egyes GridItem-eiddel, valahogy így:

    list.add(...)-al.
    majd egy foreach-el menj végig az összesen.

    foreach(var elem in list) { elem.Source = SetImage; elem.Content = GridLabel; }
    Sok sikert!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd