Come passare un Nome di un componente grafico (Image, Label...) dinamicamente

di Anonimizzato7133 il
5 risposte
Ciao,

vorrei fare questa cosa e una volta l'avevo fatto ma non riesco a ritrovare più come. Normalmente uso questo comando per passare un'immagine:

NomeComponenteImage.BackgroundImage = Image.FromFile("immagine.png");

e fin qui ok. Ma e volessi passare il nome della variabile come immagine? ad esempio:

Ho una stringa che mi indica lo stato dei led statoLed= { 0, 1, 0, 1} e quattro Image nell'interfaccia che si chiameranno Led1, Led2, Led3, Led4.
Dovrei fare un if else per ogni Led ma non c'è modo di fare un ciclo e passare dinamicamente il nome del componente Image, ad esempio:
for (int i = 1; i < 5; i++)
{
if (statoLed == 1)
(Led + i).BackgroundImage = Image.FromFile("Led_verde.png");
else
(Led + i).BackgroundImage = Image.FromFile("Led_rosso.png");
}

Grazie!!!

5 Risposte

  • Se i controlli sono delle PictureBox, allora
    
    for (int i = 1; i < 5; i++)
    {
       string p = "Led_verde.png";
       if (statoLed[i] == 1) p = "Led_rosso.png";
    
       PictureBox led = (PictureBox)Controls["Led" + i.ToString()];
       led.BackgroundImage = Image.FromFile(p);
    }
    
  • oregon ha scritto:


    Se i controlli sono delle PictureBox, allora
    
    for (int i = 1; i < 5; i++)
    {
       string p = "Led_verde.png";
       if (statoLed[i] == 1) p = "Led_rosso.png";
    
       PictureBox led = (PictureBox)Controls["Led" + i.ToString()];
       led.BackgroundImage = Image.FromFile(p);
    }
    
    In questo modo non vado ad istanzire ogni volta led?
    Se faccio così?
    Controls["led" + i].BackgroundImage = Image.FromFile("imm/bullet_green.png");
    Se ho capito bene Controls serve proprio a recuperare un controllo tramite il nome no?
    Grazie!
  • Non istanzi nulla, led è un riferimento al controllo che ti serve in quel momento.
  • oregon ha scritto:


    Non istanzi nulla, led è un riferimento al controllo che ti serve in quel momento.
    ok, ma così non dovrebbe funzionare lo stesso? o non ho capito bene cosa fa Controls[String]?
    Controls["led" + i].BackgroundImage = Image.FromFile("imm/bullet_green.png");
    Mi sembra simile alla funzione javascript per recuperare un elemento della pagina o sbaglio?
  • Sì, anche così funziona ma è meno chiaro.
Devi accedere o registrarti per scrivere nel forum
5 risposte