Oppure

Loading
15/10/15 6:55
Thejuster
Lupetto, principalmente siamo qui per tentar di far capire dove si sbaglia
e non per dare a chi chiede codice pronto come una libreria.

Darkjuster ti ha dato un ottimo consiglio
Come me, che ti ho scritto il codice corretto.


questo qui.

int conta = 0;
            for (int i = panel1.Controls.Count - 1; i >= 0; i--)
            {
                if (panel1.Controls[i].GetType() == typeof(PictureBox))
                {
          //--->       panel1.Controls["pictureBox" + (2 + conta).ToString()].BackgroundImage = imageList1.Images[conta];
                    conta++;
                }
            }


E' completamente inutile.
perché il condizionale sopra, effettua già la verifica.
Se l'oggetto preso in considerazione è una Picturebox,
al controllo và assegnata l'immagine di background dalla ImageList.


invece sotto hai ripetuto la stessa funzione fatta dal condizionale.

Vuoi sapere cosa c'è di differente questo codice dal mio?




panel1.Controls["pictureBox" + (2 + conta).ToString()]  (diventa =  pictureBox2.BackgroundImage = Imagelist[2];


Questo frammento è completamente identico a quest'altro


panel1.Controls[i].BackgroundImage = imageList1.Images[conta + 2];




Per cui mi sembra una baggianata scusami...
Che quello funziona e questo no. Impossibile. Il procedimento è lo stesso, cambia il metodo di stesura.

Quello sopra, agisce trovando il nome esatto del controllo
Quello sotto, agisce in ordine partendo dal primo controllo trovato.

entrambi assegnano a tutte le picturebox l'immagine di background.


Fossi in tè, eviterei di usare una ImageList per queste operazioni.
Ma utilizzerei meglio una Lista di Immagini. cosa molto diversa.



List<Image> immagini = new List<Image>();


//ToDO
//Ciclo per aggiungere le risorse 
//Oppure manualmente

            int conta = 0;
            for (int i = panel1.Controls.Count - 1; i >= 0; i--)
            {
                if (panel1.Controls[i].GetType() == typeof(PictureBox))
                {
                    panel1.Controls[i].BackgroundImage = immagini[conta];
                    conta++;
                }
            }





Personalmente, userei questo metodo per diversi motivi.

1) Una imageList ha delle misure obbligate per ogni immagine
2) Una imageList supporta una qualità grafica più bassa
3) Le imageList vengono associate a dei controlli e non usate come semplici liste.

Ti posso garantire che ti sto dando consigli preziosi.
Poi, ovviamente ognuno agisce a suo modo.

Ultima modifica effettuata da Thejuster 15/10/15 6:56
mire.forumfree.it/ - Mire Engine
C# UI Designer
15/10/15 15:47
lupetto77
Ringrazio tutti per i consigli...

E' solo che su alcuni argomenti dovrei approfondire, infatti sto leggendo i vostri consigli e non sapete quanto sto sbattendo la testa a forza di riprovare e continuerò cosi.
No non ho chiesto codice pronto infatti posto il codice che ho provato io poi mi vengono suggeriti metodi migliori e uso quelli cercando di capire come funzionano, però se non riesco chiedo informazioni sul funzionamento o cercare di capire dove sbaglio.
So che posso essere fastidioso e chiedo scusa e pazienza, ripeto sono agli inizi.

Ho usato il debug ma l'indici (a me) sembrano corretti.

Usando questo codice:

List<Image> immagini = new List<Image>();


Nell'evento Load del Form1:
            //Spiego quello che ho fatto.
            //Le immagini l'ho caricate nelle risorse->Immagini->selezionato le varie immagini
            immagini.Add(Properties.Resources._0_NomeImmagine1);
            immagini.Add(Properties.Resources._1_NomeImmagine2);
            immagini.Add(Properties.Resources._2_NomeImmagine3);
            immagini.Add(Properties.Resources._3_NomeImmagine4);
            immagini.Add(Properties.Resources._4_NomeImmagine5);
            immagini.Add(Properties.Resources._5_NomeImmagine6);
            //...
            //Avrei fatto una cosa del genere:
//foreach (Image immagine in immagini)
//{
   //immagini.Add(Properties.Resources QUI non so come richiamare tutte le immagini in un colpo solo);
//}

            int conta = 0;
            for (int i = panel1.Controls.Count - 1; i >= 0; i--)
            {
                if (panel1.Controls[i].GetType() == typeof(PictureBox))
                {
                    panel1.Controls[i].BackgroundImage = immagini[conta];
                    conta++;
                }
            }


Però in conclusione le immagini non sono in ordine.
Ecco perchè specificavo il nome della pictureBox da dove iniziare, cosi facendo le ordinave bene.
Però mi hai detto che è un metodo rozzo :) infatti ho provato con il metodo da te consigliato ma non riesco proprio a far ordinare le immagini, e guardando il codice a me sembra corretto e non capisco il non funzionamento.

anche se le immagini l'ho aggiunte in ordine nella lista.
Ultima modifica effettuata da lupetto77 15/10/15 18:54
aaa
19/10/15 13:32
Thejuster
non c'è nulla da sbattersi la testa.
il codice è corretto è sono più che sicuro che dovrebbe funzionare.

Facciamo in questo modo..

Ti faccio un applicazione di prova, così dopo vedi tu dove ci sono differenze è se c'è qualcosa che io faccio
diversamente da te.

mire.forumfree.it/ - Mire Engine
C# UI Designer
19/10/15 14:12
lupetto77
Ok grazie :k:
aaa
19/10/15 14:43
Thejuster
Ecco.

Non sò dove sia il tuo problema ma non capisco.
Ti allego il mio programma di prova.

Non cambia praticamente quasi nulla dal tuo codice.

Ti ho numerato appunto le immagini

A,b,c,d,e,f,g,h,i,l,m,n 12 come le picture box.

Ciclo invertito per ordinale ecc. ecc.

tutto funziona regolarmente.

mediafire.com/download/lwy8yr0k0r5kklq/…

mire.forumfree.it/ - Mire Engine
C# UI Designer
19/10/15 20:23
lupetto77
Infatti anche il tuo codice funziona perfettamente.

Ho capito qual'è il problema, ti spiego.

Io devo caricare le immagini ma poi con 2 button dovevo poter andar avanti e indietro le immagini.

All'inizio avevo pensato di mettere nel panel due file di pictureBox una sopra l'altra in modo da poter far ruotare le immagini, cosi fancendo metteva le immagini come voleva lui.

Ora stavo pensando di mettere le altre in un secondo panel, per poi sovrappore i 2 panel.
Sperando poi si riesca a far ruotare le immagini in modo non troppo complicato.
Voi che siete più esperti potete darmi un consiglio per fare una cosa del genere ma in modo corretto?

Grazie infinite per l'aiuto.
Ultima modifica effettuata da lupetto77 19/10/15 20:25
aaa
20/10/15 12:19
Thejuster
Stavolta spero ti sarà di aiuto per risolvere il tuo problema

mediafire.com/download/y9exe790gzqk6jh/…

Ti ho creato un Panel che genera da solo 3 Picture in primo piano.
Ma puoi anche aumentarle. ti ho lasciato il sorgente apposta.

Fa tutto da solo.

Basta aggiungere al pannello due pulsanti uno a destra è uno a sinistra
e settarli nella proprietà del Panel.

(Pulsante_Sinistro: ) (Pulsante_Destro: )

ed aggiungere come evento click


picturePanel1.MoveRight();

//oppure

picturePanel1.MoveLeft();



per far scrollare le immagini in sequenza.

Di default ne ho lasciate 3 in primo piano giusto per farti capire la meccanica del sorgente.

Li hai tutto, studiatelo per bene e cerca di rifarlo adatto alle tue esigenze.


mediafire.com/download/y9exe790gzqk6jh/…
mire.forumfree.it/ - Mire Engine
C# UI Designer
20/10/15 15:56
lupetto77
Ciao Thejuster e grazie infinite.
Ultima modifica effettuata da lupetto77 20/10/15 16:00
aaa