none
Come selezionare una pictureBox all'interno di un flowLayoutPanel ? RRS feed

  • Domanda

  • Ciao a tutti e Buon 2017.

    non riesco a venirne a capo .... carico delle immagini in un flowLayoutPanel , le posso anche aggiungere e fino qui è tutto OK, funziona tutto . Il problema è che non flowLayoutPanel non permette una selezione clickabile ma io ho bisogno si usare proprio il flowLayoutPanel . Esiste nei vari Controls la possibilità di ottenere un'evento click sull'immagine ?

    Carico le foto :

    OleDbDataReader FotoPrecedenti = CaricoFotoPrecedenti.ExecuteReader();
                while (FotoPrecedenti.Read())
                {
                    FotoPrecedenti_N = FotoPrecedenti.GetString(6);
                    PictureBox pb = new PictureBox();
                    Image loadedImage = Image.FromFile(FotoPrecedenti_N);
                    pb.SizeMode = PictureBoxSizeMode.Zoom;
                    pb.Height = 120; pb.Width = 120; pb.Image = loadedImage;
                    flowLayoutPanel1.Controls.Add(pb);
                }


    • Modificato Nick_61 lunedì 2 gennaio 2017 09:00
    lunedì 2 gennaio 2017 08:57

Risposte

  • Ottimo :D

    A volte scrivendo il codice a mano qualcosa si dimentica :D

    Se hai risolto puoi impostare come risposta del thread il mio post in modo da chiuderlo

    Ciao

    Alessio

    • Contrassegnato come risposta Nick_61 mercoledì 4 gennaio 2017 19:35
    mercoledì 4 gennaio 2017 15:30
  • Grazie mille !!!!! .... provo subito !!
    • Contrassegnato come risposta Nick_61 mercoledì 4 gennaio 2017 19:36
    mercoledì 4 gennaio 2017 13:47
  • ok, Bene !! Funziona ..... però ho dovuto aggiungere .ToString()

    pictureBox1.ImageLocation = selectedPicture.Tag;
    pictureBox1.ImageLocation = selectedPicture.Tag.ToString();
    Adesso Va a Meraviglia .... Grazie Ancora !!

    • Contrassegnato come risposta Nick_61 mercoledì 4 gennaio 2017 19:35
    mercoledì 4 gennaio 2017 15:23

Tutte le risposte

  • Ciao,

    per avere l'evento click ti basta aggiungerlo alla singola immagine che stai creando

    pb.Click+=tuoevento

    e il campo Tag per memorizzare qualsiasi informazione che può esserti utile nella selezione dell'oggetto

    Ciao

    Alessio

    lunedì 2 gennaio 2017 10:19
  • scusa ma mi trovo in difficoltà:

    potresti farmi un breve esempio ?

    la selezione deve avvenire chiaramente al di fuori del ciclo While.

    Grazie

    lunedì 2 gennaio 2017 12:42
  • Ciao,

    nel codice nella creazione dell'oggetto pb se inizia a scrivere .Click+= e premi tab vedrai che ti genera in automatico l'evento di click.

    Gli eventi vengono richiamati in modo asincrono quando viene scatenata una situazione, nel tuo caso quando ogni pulsante verrà selezionato verrà eseguito quel metodo per il relativo pulsante.

    Ciao

    Alessio

    lunedì 2 gennaio 2017 13:29
  • ho fatto .... dunque, l'evento funziona , ma come prevedevo mi mostra l'ultima foto caricata su qualsiasi click (anche della prima posizione ... sicuramente ho sbagliato qualcosa ... dove ?

    Questo è l'evento che mi ha generato :

    private void Pb_Click(object sender, EventArgs e)
            {
                  
                try
                {
                    pictureBox1.ImageLocation = FotoPrecedenti_N;
                    pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
                }
                catch
                {
                    throw new NotImplementedException();
                }
            }

    e questo è il frammento di codice dove è stato inserito Pb.click+= (premendo poi Tab) :

    while (FotoPrecedenti.Read())
                {
                    FotoPrecedenti_N = FotoPrecedenti.GetString(6);
                    PictureBox pb = new PictureBox();
                    pb.Click += Pb_Click;
                    Image loadedImage = Image.FromFile(FotoPrecedenti_N);
                    pb.SizeMode = PictureBoxSizeMode.Zoom;
                    pb.Height = 120; pb.Width = 120; pb.Image = loadedImage;
                    flowLayoutPanel1.Controls.Add(pb);
                    
                }
    ho inserito una pictureBox per presentare la foto dopo il click


    • Modificato Nick_61 martedì 3 gennaio 2017 08:07
    martedì 3 gennaio 2017 08:06
  • Ciao,

    è normale visto che nell'evento fai riferimento sempre all'ultimo elemento, per avere l'immagine selezionata devi fare

    PictureBox selectedPicture=(PictureBox )sender
     

    come ti avevo già detto puoi utilizzare il campo Tad di picturebox se vuoi portarti dietro qualche altre dato

    Ciao

    Alessio

    martedì 3 gennaio 2017 08:28
  • Ciao,

    come hai scritto tu, ad ogni click su qualsiasi immagine, esegui:

    pictureBox1.ImageLocation = FotoPrecedenti_N;

    quindi sarà sempre pari al valore FotoPrecedenti_N assegnato per ultimo nel while.

    Dovresti invece ricavarti la PictureBox esatta su cui è stato fatto il click, che puoi ottenere semplicemente dall'oggetto sender del gestore Pb_Click.

    private void Pb_Click(object sender, EventArgs e)

    e da questo ottenere l'immagine... 


    martedì 3 gennaio 2017 08:31
    Moderatore
  • purtroppo non programmo da molto e questa soluzione

    per me è al quanto difficile da comprendere , per questo

    chiedevo un' esempio avendo aggiunto una pictureBox e

    mandando alla stessa la selezione del click.

    mercoledì 4 gennaio 2017 07:54
  • nel while puoi mettere

    pb.Tag= FotoPrecedenti.GetString(6);
    

    e nell'evento

    PictureBox selectedPicture=(PictureBox )sender;

    pictureBox1.ImageLocation = selectedPicture.Tag; pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;


    Ciao

    Alessio

    mercoledì 4 gennaio 2017 13:34
  • Grazie mille !!!!! .... provo subito !!
    • Contrassegnato come risposta Nick_61 mercoledì 4 gennaio 2017 19:36
    mercoledì 4 gennaio 2017 13:47
  • ok, Bene !! Funziona ..... però ho dovuto aggiungere .ToString()

    pictureBox1.ImageLocation = selectedPicture.Tag;
    pictureBox1.ImageLocation = selectedPicture.Tag.ToString();
    Adesso Va a Meraviglia .... Grazie Ancora !!

    • Contrassegnato come risposta Nick_61 mercoledì 4 gennaio 2017 19:35
    mercoledì 4 gennaio 2017 15:23
  • Ottimo :D

    A volte scrivendo il codice a mano qualcosa si dimentica :D

    Se hai risolto puoi impostare come risposta del thread il mio post in modo da chiuderlo

    Ciao

    Alessio

    • Contrassegnato come risposta Nick_61 mercoledì 4 gennaio 2017 19:35
    mercoledì 4 gennaio 2017 15:30