Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Non è che il problema risiede semplicemente nella chiamata al metodo Dispose che potrebbe non avere un preciso effetto in questo contesto? :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  2. #12
    Originariamente inviato da alka
    Non è che il problema risiede semplicemente nella chiamata al metodo Dispose che potrebbe non avere un preciso effetto in questo contesto? :master:
    Ma come posso fare: Dispose mi serve perchè devo liberare dalla memoria l'immagine visualizzata in una PictureBox. Infatti l'immagine (come da codice) andrà spostata.
    Penso che non ci siano alternative a dispose per non incappare in un'altra eccezione

    O forse non ho capito quello che mi vuoi dire

    Ciao

  3. #13
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Originariamente inviato da Marco Colli
    Infatti l'immagine (come da codice) andrà spostata.
    Cosa significa "andrà spostata"? Spostata dove? In che senso?

    Ad ogni modo, siccome la proprietà a cui fai riferimento appartiene ad un controllo, è il controllo che ha la responsabilità di eseguire la Dispose sull'oggetto quando non è più necessario, altrimenti rischi di sottoporre a finalizzazione un oggetto che il controllo sfrutta per la visualizzazione, rompendo il funzionamento del controllo stesso.

    Piuttosto che chiedere dove spostare la chiamata a Dispose, spiega accuratamente ciò che devi fare con quell'immagine: è possibile che Dispose non c'entri nulla, che sia un'implementazione errata o che peggio ancora provochi danni.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #14
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, effettivamente penso che il problema è proprio sulla "Dispose", in quanto l'uso della MessageBox è corretto.
    Ora non si capisce bene cosa devi fare, ma sicuramete, come detto da alka, fai un uso sbagliato della Dispose..
    Jupy

  5. #15
    Originariamente inviato da alka
    Cosa significa "andrà spostata"? Spostata dove? In che senso?

    Ad ogni modo, siccome la proprietà a cui fai riferimento appartiene ad un controllo, è il controllo che ha la responsabilità di eseguire la Dispose sull'oggetto quando non è più necessario, altrimenti rischi di sottoporre a finalizzazione un oggetto che il controllo sfrutta per la visualizzazione, rompendo il funzionamento del controllo stesso.

    Piuttosto che chiedere dove spostare la chiamata a Dispose, spiega accuratamente ciò che devi fare con quell'immagine: è possibile che Dispose non c'entri nulla, che sia un'implementazione errata o che peggio ancora provochi danni.

    Ciao!
    Scusandomi se vi rompo ancora, vi spiego al completo quello che voglio fare...
    ho un form in cui è visualizzato un fileListBox, selezionando il nome di un'immagine essa viene visualizzata in un PictureBox. Questa immagine in base al tasto premuto viene spostata in una cartella, oppure eliminata (non prima di aver mostrato il famigerato MessageBox).
    Per comodità vi riporto il codice completo - non siete obbligati a leggerlo

    Private Sub FileListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileListBox1.SelectedIndexChanged

    'percorso del file selezionato
    Dim FileSelezionato As String = FileListBox1.Path & "\" & FileListBox1.FileName

    'mostro la foto
    Me.PictureBox1.Image = System.Drawing.Image.FromFile(FileSelezionato)


    End Sub

    Private Function NuovoPercorsoFile(ByVal cat As String) As String

    'restituisco il nuovo percorso del file
    Return FileListBox1.Path & "\" & cat & "\" & FileListBox1.FileName

    End Function

    Private Sub FileListBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles FileListBox1.KeyPress

    'percorso del file selezionato
    Dim FileSelezionato As String = FileListBox1.Path & "\" & FileListBox1.FileName

    'libero le risorse: altrimenti incappo in una IOException (Il processo non può accedere al
    'file perché è in uso da un altro processo.)
    Me.PictureBox1.Image.Dispose()



    'azioni
    If e.KeyChar = "o" Then
    My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("altri"))
    ElseIf e.KeyChar = "w" Then
    My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("bianchi"))
    ElseIf e.KeyChar = "b" Then
    My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("blu"))
    ElseIf e.KeyChar = "y" Then
    My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("gialli"))
    ElseIf e.KeyChar = "r" Then
    My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("rossi"))
    ElseIf e.KeyChar = "g" Then
    My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("verdi"))
    ElseIf e.KeyChar = "v" Then
    My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("violetti"))
    ElseIf e.KeyChar = "x" Then
    My.Computer.FileSystem.MoveFile(FileSelezionato, NuovoPercorsoFile("scartati"))
    ElseIf e.KeyChar = "d" Then
    'MsgBox("Comando")
    Else
    'MsgBox("Comando non trovato!")
    End If

    'eseguo il refresh del FileListBox1
    Me.FileListBox1.Refresh()

    'seleziono la prima voce del FileListBox1
    Me.FileListBox1.SelectedIndex = 0

    End Sub

    Grazie davvero

  6. #16
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    A prima vista, credo che il problema sia legato al fatto che tu assegni al controllo PictureBox il riferimento ad una immagine che viene creata, tramite la classe Image, legandola al file fisico su disco.

    Ciò che dovresti fare, secondo me, è invece copiare l'immagine caricata da disco all'interno di un Bitmap o una risorsa equivalente, creata in memoria, distruggendo poi il solo oggetto Image che hai utilizzato per il caricamento, assegnando il Bitmap al controllo PictureBox in modo da poter disporre dell'immagine in ogni momento chiudendo la connessione fisica al file su disco, che impiega risorse aggiuntive inutili e che deve essere utilizzato solo per il tempo necessario al caricamento dell'immagine stessa.

    Inoltre, va detto che il controllo PictureBox ha una proprietà che consente di specificare direttamente il percorso da caricare, senza dover svolgere l'operazione manualmente.

    Per altre informazioni, ti basta leggere la documentazione relativa all'oggetto.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #17
    Me.PictureBox1.Load(FileSelezionato)

    La soluzione era semplice, così facendo non devo neanche liberare le risore!

    Grazie a tutti


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.