Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    [VB.NET] e AdobePdfReader

    Ciao a tutti,
    Ho un piccolo problema, fondamentalemente ho creato una form che contiene una listview e il viewer di pdf, al click di un elemento nella list eseguo delle operazioni e in particolare cambio la proprietà src. del mio viewer pdf.
    alla chiusura della form faccio il dispose dell'oggetto viewer della form.
    Il problema è che dopo un po che continuo ad sostituire i pdf (anche se esco e rientro dalla form effettuando cosi il dispose) mi arriva un messaggio da adobe reader che mi dice che ho superato il numero massimo dei pdf che si possono aprire contemporaneamente.
    Cosa posso fare?
    Ogni volta che cambio il pdf devo utilizzare un comando particolare per chiudere l'altro?

    Help

    Ciao e Grazie
    Paolo
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    sicuramente usi oggetti che implementano idisposable e non li chiudi. senza codice è il massimo che possiamo dirti...

  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Scusami pensavo fosse sufficiente la spigazione, dato che pensavo fosse un problema circoscritto all'oggetto pdf chiuso nel modo scorretto.
    Ecco il codice.
    codice:
    Public Class ListProfile
        Dim db As New Database
    
        Private Sub ListProfile_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            AggiornaProfili()
        End Sub
    
        Private Sub ListProfile_Activated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Activated
            ModelView.Focus()
            ModelView.Items(0).Selected = True
            'CaricaDatiFigurini()
        End Sub
    
        Private Sub CaricaDatiFigurini()
    
            If ModelView.SelectedItems.Count <> 0 Then
                Dim FilePdf As String
                PictureBoxFigurini.Image = Image.FromFile(System.Environment.CurrentDirectory + "\images\figurini\" + ModelView.SelectedItems(0).SubItems(0).Text + ".jpg")
                FilePdf = System.Environment.CurrentDirectory + "\doc\doc_tecnica\" + GeneralModel.language + "\" + ModelView.SelectedItems(0).SubItems(0).Text + ".pdf"
                If System.IO.File.Exists(FilePdf) Then
                    TecDocPDF.src = FilePdf
                Else
                    If GeneralModel.language = "ITA" Then
                        MessageBox.Show("Il file richiesto non è valido." & vbCrLf & "Contattare il supporto tecnico per correggere il problema", "Errore!")
                    ElseIf GeneralModel.language = "ENG" Then
                        MessageBox.Show("The requested file is not valid." & vbCrLf & "Contact technical support", "Error!")
                    End If
                End If
    
            End If
        End Sub
        Private Sub AggiornaProfili() Handles NameSearch.KeyUp
            db.Connetti()
    
            Dim Sql As String
    
            Dim dt As New DataTable
            Dim ds As New DataSet
            ds.Tables.Add(dt)
    
            Sql = "SELECT * FROM modelli WHERE modello_nome LIKE '%" & NameSearch.Text & "%'"
    
            Dim da As New OleDb.OleDbDataAdapter(Sql, db.istance)
            da.Fill(dt)
    
            ModelView.Items.Clear()
            For Each myRows In dt.Rows
                Sql = "SELECT COUNT(*) FROM Allegati WHERE modello_id = " & CInt(myRows.Item("modello_id"))
                Dim command As New OleDb.OleDbCommand(Sql, db.istance)
                Dim reader As OleDb.OleDbDataReader = command.ExecuteReader()
                reader.Read()
                If reader(0).ToString() > 0 Then
                    ModelView.Items.Add(myRows.Item("modello_id"), 0)
                Else
                    ModelView.Items.Add(myRows.Item("modello_id"), 1)
                End If
    
                ModelView.Items(ModelView.Items.Count - 1).SubItems.Add(myRows.Item("modello_nome"))
                ModelView.Items(ModelView.Items.Count - 1).SubItems.Add(myRows.Item("modello_anno"))
            Next
    
            db.Disconnetti()
        End Sub
    
        Private Sub ResetDescButton(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImgClose.MouseLeave, BeforeForm.MouseLeave
            DescButton.Text = " "
        End Sub
    
        Private Sub ImgClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImgClose.Click
            TecDocPDF.Dispose()
            Application.Exit()
        End Sub
    
        Private Sub ImgClose_MouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImgClose.MouseHover
            If GeneralModel.language = "ITA" Then
                DescButton.Text = "Chiudi Programma"
            ElseIf GeneralModel.language = "ENG" Then
                DescButton.Text = "Exit Program"
            End If
        End Sub
    
        Private Sub BeforeForm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeforeForm.Click
            TecDocPDF.Dispose()
            Me.Close()
            MainMenu.Show()
        End Sub
    
        Private Sub BeforeForm_MouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeforeForm.MouseHover
            If GeneralModel.language = "ITA" Then
                DescButton.Text = "Torna all' indice precedente"
            ElseIf GeneralModel.language = "ENG" Then
                DescButton.Text = "GoTo previous index"
            End If
        End Sub
    
        Private Sub ModelView_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModelView.SelectedIndexChanged
            CaricaDatiFigurini()
            ModelView.Focus()
        End Sub
    
        Private Sub TecDocPDF_OnError(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TecDocPDF.OnError
    
        End Sub
    
        Private Sub Confirm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Confirm.Click
            'Apri Lista Documentazione Tecnica
    
            DocTec.idmodel = ModelView.SelectedItems(0).SubItems(0).Text
            DocTec.NameModel = ModelView.SelectedItems(0).SubItems(1).Text
            Me.Close()
            DocTec.Show()
    
            'Dim IdModel As Integer
            'IdModel = CInt(ModelView.SelectedItems(0).SubItems(0).Text)
    
            'Dim Sql
    
            'ModelView.Items.Clear()
            'ModelView.Columns.Clear()
    
            'ModelView.Columns.Add("Tipologia")
            'ModelView.Columns.Add("File")
            'ModelView.Columns.Add("Language")
    
            'db.Connetti()
    
            'Sql = "SELECT Allegati.allegato_file, Allegati.allegato_lang, Allegati_Tipo.allegatotipo_desc FROM Allegati "
            'Sql = Sql & "INNER JOIN Allegati_Tipo ON Allegati.allegatotipo_id = Allegati_Tipo.allegatotipo_id "
            'Sql = Sql & "WHERE modello_id = " & IdModel
            'Dim command As New OleDb.OleDbCommand(Sql, db.istance)
            'Dim reader As OleDb.OleDbDataReader = command.ExecuteReader()
            'While reader.Read()
            '    ModelView.Items.Add(reader("allegatotipo_desc").ToString)
            '    ModelView.Items(ModelView.Items.Count - 1).SubItems.Add(reader("allegato_file").ToString)
            '    ModelView.Items(ModelView.Items.Count - 1).SubItems.Add(reader("allegato_lang").ToString)
            'End While
    
            'db.Disconnetti()
        End Sub
    End Class
    Che mestiere difficile.....essere da soli ancora di più

  4. #4
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    TecDocPDF è una tua classe? o è direttamente la classe della libreira? in ogni caso vorrei vedere o il codice o sapere di quale si tratta.

    il problema molto probabilmente è legato al fatto che non si dovrebbe caricare il pdf semplicemente cambiando l'src ma creando un istanza nuova dell'oggetto.

    p.s.
    due dispose sono uno smell forte... è sbagliato secondo me fare cosi. Se una oggetto è disposable deve essere aperta e chiusa subito, magari dentro una direttiva using... oppure aperto nel costruttore e chiuse nel dispose ma a monte comunque la chiamata deve essere dentro la using.

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    TecDocPDF è proprio il nome dell'oggetto.
    Esso è stato importato nel progetto tramite la procedura Add Reference, Com, Adobe Acrobat 7.0 Browser Control Type Library 1.0.
    E' una procedura che ho trovato nei vari forum.....
    Perdonami se non sono preciso e come avrai capito è da poco che programmo in vb.net e ti ringrazio anticipatamente per il tuo aiuto
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    è un oggetto unmanaged che ogni volta che apre un pdf lascia un handler aperto. Bisogna guardare la documentazione per capire qual'è il modo "giusto" per gestire l'apertura del file, quella di cambiare solo l'src non è quella giusta...

  7. #7
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    p.s.
    molto probabilmente l'oggetto tecdocpdf avrà un metodo Close(), chiamalo prima di questa istruzione:

    TecDocPDF.src = FilePdf

    e prima dei due dispose

  8. #8
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    ho provato a cercare sia il metodo exit che il metodo close ma non esistono...

    codice:
            Dim myProcesses As Process() = Process.GetProcessesByName("acrobat")
            Dim myProcess As Process
            For Each myProcess In myProcesses
                If myProcess.MainWindowTitle = "" Then myProcess.Kill()
            Next myProcess
    ho trovato questa soluzione da applicare che non è propio il massimo perchè se il client ha un documento aperto chiude anche quello....

    Uff che noia sta libreria
    Che mestiere difficile.....essere da soli ancora di più

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 © 2025 vBulletin Solutions, Inc. All rights reserved.