Oppure

Loading
16/03/16 14:37
Thejuster
puoi mediare alle strutture ed assegnare un riferimento ad ogni immagine che avrà un tag o come dire un un nome.
Che al click sarà visualizzato sulla label.

un esempio è:


public struct _immagini
{

 public Image img;
 public string riferimento;

}


List<_immagini> Immagini = new List<_immagini>();





Al form load. Invece di aggiungere direttamente un elemento nella lista

  immagini.Add(Properties.Resources.A);
            immagini.Add(Properties.Resources.B);
            immagini.Add(Properties.Resources.C);
//ecc. ecc.


fai in questo modo


//preparo la struttura

_immagini img = new _immagini();

img.img = Properties.Resource.A;
img.riferimento = "Lettera A";

Immagini.Add(img);




Quando scorri le immagini:



 private void btnSinistra_Click(object sender, EventArgs e)
        {
            // Richiamo il metodo per spostare di uno la posizione
            RuotaASinistra(1);

            // Visualizzo nelle pictureBox le immagini ruotate
            int conta = 0;
            for (int i = Controls.Count - 1; i >= 0; i--)
            {
                if (Controls[i].GetType() == typeof(PictureBox))
                {
                     //Così
                    Controls[i].BackgroundImage = Immagini[conta].img;
                    Controls[i].Tag = Immagini[conta].riferimento;
                    conta++;
                }
            }
        }

        private void btnDestra_Click(object sender, EventArgs e)
        {
            // Richiamo il metodo per spostare di uno la posizione
            RuotaADestra(1);

            //// Visualizzo nelle pictureBox le immagini ruotate
            int conta = 0;
            for (int i = Controls.Count - 1; i >= 0; i--)
            {
                if (Controls[i].GetType() == typeof(PictureBox))
                {
                    //Così
                    Controls[i].BackgroundImage = Immagini[conta].img;
                    Controls[i].Tag = Immagini[conta].riferimento;
                    conta++;
                }
            }
        }






Al click sulle pictureBox;



private void pictureBox1_Click(object sender, EventArgs e)
        {

       label1.Text = pictureBox1.Tag.ToString(); //Applico il testo recuperato dal tag.

 }




In questo modo dovrebbe funzionarti.
In pratica le pictureBox hanno un campo nelle proprietà chiamato Tag.
in quel campo puoi scriverci riferimenti o qualcosa su cui tenere a memoria.
anche un appunto esempio.

Quando scorri, devi fare in modo di applicare ad ogni pictureBox il suo relativo Tag recuperato dalla struttura.
Così al Click, verrà mostrato il Tag che la pictureBox contiene.

Puoi anche crearti un controllo ereditato ed inserire quanti campi ti fanno comodo.

oppure al tag puoi aggiungere un separatore di stringa,
e splittare il contenuto per poi recuperare un array.

esempio:


Tag = "Frase 1|Frase 2|Frase 3";

string[] t = Tag.Split('|');

label1.text = t[0];
label2.text = t[1];
label3.text = t[2];



mire.forumfree.it/ - Mire Engine
C# UI Designer
16/03/16 16:20
lupetto77
Ciao Thejuster e grazie per l'aiuto.

Ho provato come mi hai consigliato tu, però all'avvio mostra questa eccezzione:

Eccezione non gestita di tipo 'System.ArgumentOutOfRangeException' in mscorlib.dll

Ulteriori informazioni: Index non compreso nell'intervallo. Richiesto valore non negativo e minore della dimensione della raccolta.

Ma è strano perchè non cambia quasi nulla da prima, quindi non so il perchè va fuori range, posto il codice dell'evento load che mostra questo problema:

[CODE] public partial class Form1 : Form
{
List<_Immagini> Immagine = null;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
Immagine = new List<_Immagini>();
_Immagini img = new _Immagini();
img.img = Properties.Resources.A;
img.riferimento = "Lettera A";
img.img = Properties.Resources.B;
img.riferimento = "Lettera B";
img.img = Properties.Resources.C;
img.riferimento = "Lettera C";
img.img = Properties.Resources.D;
img.riferimento = "Lettera D";
img.img = Properties.Resources.E;
img.riferimento = "Lettera E";
img.img = Properties.Resources.F;
img.riferimento = "Lettera F";
img.img = Properties.Resources.G;
img.riferimento = "Lettera G";
img.img = Properties.Resources.H;
img.riferimento = "Lettera H";
img.img = Properties.Resources.I;
img.riferimento = "Lettera I";
img.img = Properties.Resources.L;
img.riferimento = "Lettera L";

Immagine.Add(img);

int conta = 0;
for (int i = Controls.Count - 1; i >= 0; i--)
{
if (Controls[i].GetType() == typeof(PictureBox))
{
//Così
Controls[i].BackgroundImage = Immagine[conta].img; // In questa riga mostra l'eccezzione
Controls[i].Tag = Immagine[conta].riferimento;
conta++;
}
}
}
}[/CODE]
aaa
16/03/16 16:44
lupetto77
Scusa mi sono accorto ora del problema, (usando il debug consigliato da TheDarkJuster che ringrazio anche lui per i suoi consigli) dovevo aggiungere Immagine.Add(img); ad ogni coppia img - riferimento.

Dovrei aver risolto il tutto, grazie di nuovo per l'aiuto e dritte, alla prossima. ;)
Ultima modifica effettuata da lupetto77 16/03/16 16:49
aaa
16/03/16 18:14
Thejuster
come fa a funzionarti??

è sbagliato il codice.

Ad ogni setting và aggiunto alla lista

così:


 img.img = Properties.Resources.A;
 img.riferimento = "Lettera A";
 Immagine.Add(img);

 img.img = Properties.Resources.B;
 img.riferimento = "Lettera B";
 Immagine.Add(img);



ogni volta che configuri la struttura devi aggiungerla alla lista.
altrimenti come nel tuo esempio ti ritrovi un solo elemento ovvero "Lettera L"
mire.forumfree.it/ - Mire Engine
C# UI Designer
16/03/16 21:29
lupetto77
Ciao di nuovo Thejuster

Infatti nella prova iniziale mi mostrava l'eccezione, e nel debug ho visto che prendeva solo l'ultimo elemento Lettera L.

Ho scritto nel post subito sotto, in questa riga:
anche lui per i suoi consigli) dovevo aggiungere Immagine.Add(img); ad ogni coppia img - riferimento.

Scusami, forse era meglio che scrivevo come hai fatto tu, con un pezzo di codice.
aaa