Oppure

Loading
14/02/20 21:27
gianni47
E' parecchio che consulto questo sito, ed ora ho deciso di iscrivermi per poter avere suggerimenti su problemi
più specifici. Inizio subito con il problema che ho attualmente.

Dovendo organizzare e archiviare le mie fotografie ( + di un migliaio ) e non avendo trovato programmi
già confezionati con le caratteristiche di cui avrei bisogno ( automatismi di catalogazione personalizzata ),
fiducioso della piccola esperienza acquisita con altri progetti in VB, ho deciso di provare con il " faccio da me ".

Il programma dovrebbe popolare un Panel con le miniature delle immagini ( tutte o in parte ) contenute in una
cartella, come " FastStone Image Viewer o XnView ".
Ho utilizzato il metodo OpenFileDialog, ma non riesco a progredire a causa di alcuni problemi.
Ecco il codice a cui sono giunto:

        Dim Path as string = "G:\Ilmiofotoalbum""
        Dim ofd1 As OpenFileDialog = New OpenFileDialog()
        ofd1.InitialDirectory = Path
        ofd1.Multiselect = True
        ofd1.Filter = "All files|*.*"
        If ofd1.ShowDialog() = DialogResult.OK Then
            Dim files() As String = ofd1.FileNames
            Dim x As Integer = 20
            Dim y As Integer = 20
            Dim W As Integer = 180
            Dim H As Integer = 120
            Dim pic As New PictureBox
            For Each FileName In files
                pic.Image = Image.FromFile(FileName)
                pic.Size = New System.Drawing.Size(W, H)
                pic.Location = New Point(x, y)
                pic.SizeMode = PictureBoxSizeMode.StretchImage
                x = x + W + 20
                If x >= 600 Then
                    x = 20
                    y += H + 20
                End If
                Panel1.Controls.Add(pic)
                MsgBox("ok")
            Next

Panel1 = Size 920;680



La ricerca e la selezione dei file funzionano, le immagini vengono visualizzate nella posizione corretta ma
una sola per volta, quando viene visualizzata un'immagine scompaiono le precedenti.
Avrei anche bisogno di visualizzare il nome del file relativo e poter selezionare le immagini per effettuare
la catalogazione.

Ringrazio anticipatamente e saluto.

Gianni
Ultima modifica effettuata da Thejuster 16/02/20 15:01
aaa
14/02/20 21:59
Carlo
Devi generare una matrice di picture box, o una lista

  
         Panel1.Size = New Size(920, 680)
        Dim Path As String = "G:\Ilmiofotoalbum"""
        Dim ofd1 As OpenFileDialog = New OpenFileDialog()
        ofd1.InitialDirectory = Path
        ofd1.Multiselect = True
        ofd1.Filter = "All files|*.*"
        If ofd1.ShowDialog() = DialogResult.OK Then
            Dim files() As String = ofd1.FileNames
            Dim x As Integer = 20
            Dim y As Integer = 20
            Dim W As Integer = 180
            Dim H As Integer = 120
            Dim Npic As UInt16 = 0 ' serve un indice per identificare le pic
            Dim pic(files.GetUpperBound(0)) As PictureBox ' ho messo il numero delle immagini cliccate
            For Each FileName In files
                Npic += Npic ' incremento l'indice della pic
                pic(Npic) = New PictureBox ' creo una nuova picturebox
                pic(Npic).Image = Image.FromFile(FileName)
                pic(Npic).Size = New System.Drawing.Size(W, H)
                pic(Npic).Location = New Point(x, y)
                pic(Npic).SizeMode = PictureBoxSizeMode.StretchImage
                x = x + W + 20
                If x >= 600 Then
                    x = 20
                    y += H + 20
                End If
                Panel1.Controls.Add(pic(Npic)) ' tutte le pic sono gestite come una matrice
                ' MsgBox("ok")
            Next
        End If


Devi lavorare sulla gestione dei files nella cartella.
1) devi caricare la lista dei file
2) devi contare quante immagini ci sono
3) devi dimensionare la matrice delle picturebox

Incontrerai anche altri problemi, se carichi molte immagini senza rimensionarle la memoria finirà presto.

Con questo approcio ti sarà difficile mettere i nomi e le caratteristiche delle foto.
Un approcio efficiente è quello di aggiungere un UserControl o ControlloUtente, con il Controllo utente puoi creare l'equivalente di un form dove posizioni una picturebox e una label, più altre cose se ti servono, poi nel tuo form1 che già hai creato con il panel1 aggiungi tutti gli UserControl che vuoi, con la stessa modalità fatta con le picturebox(xx), gli UserControl(xx) hanno lindice per cui nessun problema per identificarli posizionarli e modificarli.
Ultima modifica effettuata da Carlo 14/02/20 23:04
in programmazione tutto è permesso
14/02/20 22:20
gianni47

Grazie mille Carlo per la tua risposta lampo molto dettagliata, sono ammirato.
Domani leggo attentamente e provo, poi ti faccio sapere.
Buon fine settimana.

P.S.
Chiedo scusa se commetto qualche errore, non sono molto abituato a scrivere.
Mi sono accorto che nel titolo non ho specificato [VB.net], e devo pure imparare ad usare i tag.

Gianni
aaa
16/02/20 22:01
Thejuster
Utilizza un FlowLayoutPanel con disposizione Da sinistra verso destra.
I Controlli saranno automaticamente messi uno accanto all'altro e spostati in basso quando serve
con le scrollbar in modo da scorrere.

Come seconda cosa, ti conviene come detto da carlo di ridurre l'immagine.
Una volta aperto in file di disegnare l'immagine di una dimensione tipo 250,250 max

Carichi prima l'immagine in una Bitmap vuota e poi con il graphics la ridisegni 250 x 250 giusto per avere un anteprima.

per risparmiare carico di memoria il controllo picturebox ha una proprietà chiamata Tag da li esempio puoi impostare il percorso originale del file.

un esempio pratico è

Private Sub Load()
    Dim files As String() = Directory.GetFiles(CARTELLA_DELLE_IMMAGINI)

    For Each s As String In files

        If s.Contains(".png") OrElse s.Contains(".jpg") OrElse s.Contains(".bmp") Then
            Dim p As Panel = New Panel()
            p.BackgroundImageLayout = ImageLayout.Stretch
            p.Size = New Size(100, 100)
            Dim b As Bitmap = New Bitmap(100, 100)
            Dim img As Image = Image.FromFile(s)
            Dim g As Graphics = Graphics.FromImage(b)
            g.DrawImage(img, New Rectangle(0, 0, 100, 100))
            p.Cursor = Cursors.Hand
            p.BackgroundImage = b
            p.Tag = s
            p.Click += P_Click
            flowLayoutPanel1.Controls.Add(p)
        Else
            Continue For
        End If
    Next
End Sub



ovviamente poi al click


'Mostra un dialogo che mostra l'immagine

Private Sub P_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim img As Image = Image.FromFile((CType(sender, Panel)).Tag.ToString())
    Dim f As Form = New Form()
    f.BackgroundImage = img
    f.ShowDialog()
End Sub



E' solo un esempio ma funzionale.
poi dopo ti sistemi meglio tutto a tuo piacimento
mire.forumfree.it/ - Mire Engine
C# UI Designer
17/02/20 14:44
Carlo
Gli esempi di Thejuster sono sempre utili, e come ha affermato è una partenza, ho fatto delle aggiunte:

1) importante liberare la memoria, con img.Dispose()
2) per aggiungere il click ho messo l'istruzione estesa, in VisualStudio2012/2017 p.click, non è riconosciuto, forse ci vuole un Imports ?
3) aggiunto OpenFileDialog con il filtro per le sole immagini
4) variabili H e W per scegliere la dimensione della miniatura
5) l'aspect ratio della miniatura viene calcolato in accordo con l'immagine trattata
6) la finestra di dialogo mostra l'immagine ridimensionabile e alcune info

Imports System.IO

Public Class Form1

    Private Sub ButLOAD_Click(sender As Object, e As EventArgs) Handles ButLOAD.Click
        Dim OpDi As OpenFileDialog = New OpenFileDialog()
        OpDi.Multiselect = True
        ' solo immagini riconosciute
        OpDi.Filter = "Images(*.jpg *.bmp *.png *.gif *.tif)|*.jpg;*.bmp;*.png;*.gif;*.tif|Tutti i file (*.*)|*.*"
        If OpDi.ShowDialog() = DialogResult.OK Then
            Dim files() As String = OpDi.FileNames
            ' dimensioni a piacere miniatura, quadrata per mantenere proporzioni
            Dim W As Integer = 100
            Dim H As Integer = 100
            'sulla barra del titolo, il percorso
            Me.Text = Path.GetDirectoryName(OpDi.FileName)
            For Each FileName In files
                Dim p As Panel = New Panel()
                p.BackgroundImageLayout = ImageLayout.None
                p.Size = New Size(W, H)
                Dim b As Bitmap = New Bitmap(W, H)
                Dim img As Image = Image.FromFile(FileName)
                Dim g As Graphics = Graphics.FromImage(b)
                ' ridimensionamento con rispetto proporzioni
                Dim proporzioni As Single = img.Width / img.Height
                If img.Width > img.Height Then
                    ' orizzontale
                    g.DrawImage(img, New Rectangle(0, H / 2 - H / proporzioni / 2, W, H / proporzioni)) 
                Else
                    ' verticale
                    g.DrawImage(img, New Rectangle(W / 2 - W * proporzioni / 2, 0, W * proporzioni, H)) 
                End If
                p.Cursor = Cursors.Hand
                p.BackgroundImage = b
                p.BackColor = Color.Silver
                p.BorderStyle = BorderStyle.FixedSingle
                p.Tag = FileName
                ' aggiunge il click
                AddHandler p.Click, AddressOf P_Click
                FlowLayoutPanel1.Controls.Add(p)
                ' libero la memoria
                img.Dispose()
            Next
        End If
    End Sub

    'Mostra un dialogo che mostra l'immagine

    Private Sub P_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim img As Image = Image.FromFile((CType(sender, Panel)).Tag.ToString())
        Dim f As Form = New Form()
        f.Text = Path.GetFileName((CType(sender, Panel)).Tag.ToString()) & " - " & img.Size.ToString()
        f.BackgroundImage = img
        ' finestra ridimensionabile
        f.BackgroundImageLayout = ImageLayout.Zoom
        f.Show()
    End Sub

    Private Sub ButSVUOTA_Click(sender As Object, e As EventArgs) Handles ButSVUOTA.Click
        FlowLayoutPanel1.Controls.Clear()
    End Sub

    Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged
        FlowLayoutPanel1.Size = New Size(Me.Width - 40, Me.Height - 90)
    End Sub

End Class


E' ancora una partenza, i Buttons ButLOAD, ButSVUOTA e il FlowLayoutPanel FlowLayoutPanel1, vanno aggiunti in progettazione.
Ultima modifica effettuata da Carlo 18/02/20 12:11
in programmazione tutto è permesso
18/02/20 21:18
gianni47
Salve a tutti e grazie delle risposte.
Scusate il ritardo ma ho avuto contrattempi che non ho potuto procrastinare.
Datemi il tempo di leggere le vostre mail poi risponderò.
Scusate ancora.

Gianni
aaa
19/02/20 21:16
gianni47
In questi giorni durante le mie vicissitudini ho potuto lavorare un poco, ma su un pc non collegato in rete,
e non avendo letto le vostre mail ho proseguito seguendo la mia strada.

Ora ho letto, ma ho dovuto constatare che, conoscendo solo genericamente il mio progetto voi avete giustamente
proposto le vostre idee e di questo ringrazio immensamente.
Ma mi sono chiesto se sia giusto farvi perdere del tempo prezioso per cercare di risolvere i miei problemi proponendo
soluzioni che potrebbero anche non essere utili ai miei scopi.
Premettendo che sono sempre curioso di vedere come altri vedono e risolvono lo stesso problema, ho pensato
di preparare un pezzo di codice per darvi modo di vedere ( se lo volete ) come ho impostato la mia Form principale.
Questo codice sarebbe da mettere nella Sub Form Load e dimensiona un Form vuoto:

Me.Width = 1549   '---------------- Larghezza  Form 1 ------------------
        Me.Height = 876   '----------------- Altezza  Form 1 ------------------
        Me.Left = (Screen.PrimaryScreen.Bounds.Width - Me.Width) / 2    '---------------- Centratura x Form 1 ---
        Me.Top = (Screen.PrimaryScreen.Bounds.Height - Me.Height) / 2   Form 1 ------ Centratura y Form 1 ---
        Dim Txtbx As New TextBox   '------------ Text Box --------------
        Txtbx.Multiline = True
        Txtbx.Size = New Size(624, 30)
        Txtbx.Location = New Point(12, 443)
        Txtbx.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Controls.Add(Txtbx)
        Dim PictureBox0 As New PictureBox   '--------- finestra PictureBox ---------
        PictureBox0.Size = New Size(624, 416)
        PictureBox0.Location = New Point(12, 12)
        PictureBox0.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Controls.Add(PictureBox0)
        Dim Panel1 As New Panel   '--------- finestra Panel ---------
        Panel1.Size = New Size(879, 765)
        Panel1.Location = New Point(642, 12)
        Panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Controls.Add(Panel1)
        Dim Button1 As New Button '--------- Button 1 - Chiudi ---------
        Button1.Size = New Size(100, 30)
        Button1.Location = New Point(1421, 791)
        Button1.Text = "Chiudi"
        Button1.BackColor = Color.FromArgb(200, 110, 200)
        Button1.Font = New Font("Microsoft Sans Serif", 12)
        Button1.ForeColor = Color.Navy
        Button1.TextAlign = ContentAlignment.MiddleCenter
        Controls.Add(Button1)
        Dim Label2 As New Label   '---------------- Label 2 - comando Selezione cartella --------------
        Label2.Size = New Size(130, 30)
        Label2.Location = New Point(33, 791)
        Label2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Label2.Text = "Selezione cartella"
        Label2.BackColor = Color.PaleGreen
        Label2.Font = New Font("Microsoft Sans Serif", 10)
        Label2.ForeColor = Color.Black
        Label2.TextAlign = ContentAlignment.MiddleCenter
        Controls.Add(Label2)
        Dim Label3 As New Label   '---------------- Label 3 - comando Numerazione --------------
        Label3.Size = New Size(130, 30)
        Label3.Location = New Point(178, 791)
        Label3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Label3.Text = "Numerazione"
        Label3.BackColor = Color.PaleGoldenrod
        Label3.Font = New Font("Microsoft Sans Serif", 10)
        Label3.ForeColor = Color.Black
        Label3.TextAlign = ContentAlignment.MiddleCenter
        Controls.Add(Label3)
        Dim Label4 As New Label   '---------------- Label 4 - comando Caalogazione --------------
        Label4.Size = New Size(130, 30)
        Label4.Location = New Point(319, 791)
        Label4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Label4.Text = "Catalogazione"
        Label4.BackColor = Color.Khaki
        Label4.Font = New Font("Microsoft Sans Serif", 10)
        Label4.ForeColor = Color.Black
        Label4.TextAlign = ContentAlignment.MiddleCenter
        Controls.Add(Label4)
        Dim Label5 As New Label   '---------------- Label 5 - comando Cancella tutto --------------
        Label5.Size = New Size(130, 30)
        Label5.Location = New Point(642, 791)
        Label5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Label5.Text = "Cancella tutto"
        Label5.BackColor = Color.LightCoral
        Label5.Font = New Font("Microsoft Sans Serif", 10)
        Label5.ForeColor = Color.Black
        Label5.TextAlign = ContentAlignment.MiddleCenter
        Controls.Add(Label5)
        Dim Label6 As New Label   '---------------- Label 6 - comando Cancella selezione --------------
        Label6.Size = New Size(130, 30)
        Label6.Location = New Point(789, 791)
        Label6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Label6.Text = "Cancella selezione"
        Label6.BackColor = Color.RosyBrown
        Label6.Font = New Font("Microsoft Sans Serif", 10)
        Label6.ForeColor = Color.Black
        Label6.TextAlign = ContentAlignment.MiddleCenter
        Controls.Add(Label6)
        Dim Label7 As New Label   '---------------- Label 7 - comando Ordinamento --------------
        Label7.Size = New Size(130, 30)
        Label7.Location = New Point(939, 791)
        Label7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Label7.Text = "Ordinamento"
        Label7.BackColor = Color.SkyBlue
        Label7.Font = New Font("Microsoft Sans Serif", 10)
        Label7.ForeColor = Color.Black
        Label7.TextAlign = ContentAlignment.MiddleCenter
        Controls.Add(Label7)


Detto questo proseguo con i codici, le spiegazioni e i commenti su questo thread.
Cercherò di essere più chiaro possibile, ma ho paura che il post sarà piuttosto lungo e vi prego di farmi sapere
se questa cosa non va bene ed eventualmente come mi devo comportare.

Siccome non ho ancora deciso se utilizzare layout fissi ( probabile ) o ridimensionabili da mouse,
per facilitare i calcoli ho assegnato a delle variabili pubbliche tutti i valori di settaggio.

 Public Wpanel As Integer = 800   '... Larghezza Panel per cambio riga
    Public xpicin As Integer = 20   '... posizione x inizio righe picturebox
    Public xpic As Integer = 20   '... posizione x picturebox
    Public ypic As Integer = 20   '... posizione y picturebox
    Public Wpic As Integer = 120   '... larghezza picturebox
    Public Hpic As Integer = 80   '... altezza picturebox
    Public ximg As Integer = 5   '... posizione x immagine all'interno di picturebox
    Public yimg As Integer = 5   '... posizione y immagine all'interno di picturebox
    Public Wfdim As String = 0.0503   '... fattore dimensionamento larghezza immagine all'interno di picturebox
    Public Hfdim As String = 0.0445  '... fattore dimensionamento altezza immagine all'interno di picturebox
    Public hlab As Integer = 15   '... altezza label
    Public ftxt As String = "Microsoft Sans Serif"   '--- Font della label
    Public htxt As Integer = 7   '... altezza Font della label
    Public spWimg As Integer = 20   '... spazio orizzontale tra immagini ( e cornici )
    Public spHimg As Integer = 30   '... spazio verticale tra immagini ( e cornici )


Qui Inizia il codice di attuazione:

    'Dim Path As String = "G:\Ilmiofotoalbum" '------------------------------ percorso cartelle immagini
        Dim ofd1 As OpenFileDialog = New OpenFileDialog()
        ofd1.InitialDirectory = Path
        ofd1.Multiselect = True
        ofd1.Filter = "All files|*.*"
        ofd1.FilterIndex = 2
        ofd1.RestoreDirectory = True
        If ofd1.ShowDialog() = DialogResult.OK Then
            If Not Panel1.Controls.Count = 0 Then '------------------- controllo se nel panel ci sono già miniature
                Dim iRisp As Integer
                iRisp = MsgBox(" Nel Pannello sono già presenti altre immagini," & vbCrLf & vbCrLf & _
                               " [ SI ] Aggiunge le nuove immagini" & vbCrLf & vbCrLf & _
                               " [ NO ] Cancella le immagini presenti.", 3 + 32)
                Select Case iRisp
                    Case vbYes
                    Case vbNo
                        Panel1.Controls.Clear()
                        Call sb320()   '----------------------------- Routine per cancellare il contenuto del Panel
                    Case Else
                        Exit Sub
                End Select
            End If



Siccome non ho capito esattamente a cosa serve sapere il numero dei file della cartella, ho pensato che
avrebbe potuto essere utile anche il numero delle sole immagini selezionate , per questo ho implementato
tutte e due le funzioni di conteggio da usare secondo l'esigenza.

  Dim files() As String = ofd1.FileNames
            Dim din As New IO.DirectoryInfo(Path) '---------------------------------------- conteggio file e item
            Dim nimg As Integer = CInt(din.GetFiles.GetLength(0)) '------------------ numero file in folder
            Dim nitm As Integer = UBound(files) '-------------------------------------------- numero item in array
            Label5.Text = (nitm + 1 & " -  immagini")
            Dim Npbx As UInt16 = 0 '... indice per identificare le pic
            'Dim Nlab As UInt16 = 0 '... indice per identificare le label
            Dim pic(nimg) As PictureBox '----------------------------------- numero file in folder / numero item in array


Qui ho pensato di realizzare delle miniature con una cornice che cambia colore quando vengono selezionate.
Per fare ciò ho ridimensionato l'immagine da inserire nella PictureBox:

    For Each FileName In files
                Npbx += Npbx '-------------------------------------- incremento l'indice della pic
                ''Nlab = Npic
                pic(Npbx) = New PictureBox '------------------ creo una nuova picturebox
                pic(Npbx).BackColor = Color.Gray '---------- colore della fondo che rimarrà visibile ( cornice )
                pic(Npbx).Size = New System.Drawing.Size(Wpic, Hpic) '----- Dimensione PictureBox  = ( 120 x 80 )
                pic(Npbx).Location = New Point(xpic, ypic)
                pic(Npbx).Image = Image.FromFile(FileName)
                Dim bm_source As New Bitmap(FileName)   '-------------- ridimensionamento immagine ----------------
                Dim bm_dest As New Bitmap(CInt(bm_source.Width * Wfdim), CInt(bm_source.Height * Hfdim))
                '--- In questo caso Size sarà: Wfdim = 0,0503 e Hfdim = 0,0455
                Dim gr_dest As Graphics = Graphics.FromImage(bm_dest)
                gr_dest.DrawImage(bm_source, ximg, yimg, bm_dest.Width, bm_dest.Height)
                '--- In questo caso Location sarà: ximg = 5 e yimg = 5
                '---------------------------------------------------------- Dimensioni dell'immagine risultante = ( 115 x 76 )
                pic(Npbx).Image = bm_dest '------- caricamento dell'immagine in PictureBox


A questo punto o implementato le label con il titolo dell'immagine:

   Dim labtit As New Label '--------------------------------------------- realizzazione label titolo dell'immagine
                labtit.BackColor = Color.Beige
                Dim filetit As System.IO.FileInfo
                filetit = My.Computer.FileSystem.GetFileInfo(FileName) '--------- ricavo il titolo dell'immagine
                labtit.Text = (filetit.Name)
                labtit.Font = New Font(ftxt, htxt)
                labtit.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
                labtit.Size = New System.Drawing.Size(Wpic, hlab)
                labtit.Location() = New Point(xpic, ypic + Hpic)

                xpic = xpic + Wpic + spWimg '-------------------------- aggiornamento coordinate immagine e label successive
                If xpic >= Wpanel Then '----------- larghezza pannello = 880  alla sesta PictureBox passa alla riga successiva
                    xpic = xpicin
                    ypic += Hpic + spHimg
                End If
                Panel1.Controls.Add(pic(Npbx))
                Panel1.Controls.Add(labtit)
                gr_dest.Dispose()
            Next
        End If
        MsgBox(Panel1.Controls.Count)


Devo anche ammettere che purtroppo la mia esperienza in VB e la stanchezza di quei quattro neuroni rimasti
( 72 anni ), mi prendono un mucchio di tempo in più di quello che impieghereste voi.
Ma tengo duro perché è la mia passione, viva i bit.

Ho cercato di provare l'esempio di Thejuster perché sarei curioso di vedere il risultato utilizzando FlowLayoutPanel,
ma non sono riuscito a farlo funzionare perché mi da errore sulla riga p.Click += P_Click

'Public Event Click(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly.
Use a 'RaiseEvent' statement to raise an event.

Per quanto riguarda la memoria avrete visto che ho utilizzato il metodo Graphic per ridimensionare le immagini,
( 120 x 8 per la PictureBox e 115 x 76 per l'immagine ) anche se ammetto che non pensavo alla memoria ma alla cornice.
Il messaggio di memoria insufficiente è comparso dopo caricato un centinaio di immagini 750 Kb media x 100 = 75 Mb,
ma non so ancora come interpretarlo.
Ho inserito gr_dest.Dispose(), sostituto di img.Dispose(), ma non ho notato differenze.
Altro errore che non ho ancora individuato è che alla fine, quando vado a contare le immagini del pannello,
risultano sempre essere il doppio di quelle effettivamente presenti.

Sto ancora guardando cose del codice di Carlo, ma credo sia ora di chiudere perché le cosa sono andate
per le lunghe.
Torno a ringraziarvi della pazienza, aspetto commenti e Saluto.

Gianni
aaa
20/02/20 11:31
gianni47

Buon giorno, rieccomi.

Sono riuscito a provare il codice di Carlo, ed ho potuto constatare i vantaggi del metodo FlowLayoutPanel.
Veloce a caricare e non da problemi di memoria, ho caricato più di 800 immagini poi mi sono fermato.
Non ho però capito a cosa serve e come funziona la parte del codice "AddHandler p.Click, AddressOf P_Click",
come non ho capito come gestisce la parte dell'etichetta.
Dovrò poi anche implementare i codici per la selezione delle miniature, ma di questo ne riparliamo
la prossima volta.
Ora proverò a modificare il mio codice con il metodo che mi avete suggerito, poi faccio sapere.

Rinnovo i ringraziamenti e saluto.

Gianni
aaa