Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    [VB.NET] - Errore dopo che apro 2 volte un form

    Ho fatto un form per il setup del programma e mi da questo errore appena lo apro 2 volte:

    Eccezione non gestita: System.NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto.
    Questo accade quando io:
    Apro il form
    Lo chiudo mediande un pulsante che esegue l'istruzione Me.Close()
    Riapro il medesimo form


    Ma cosa succesde esattamente?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Direi che vedere un po' di codice non sarebbe male...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Originariamente inviato da alka
    Direi che vedere un po' di codice non sarebbe male...
    il form ha solo questi 3 metodi

    codice:
        Private Sub frmsetup_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '
            '   GESTIONE MODELLI DI STAMPA
            '
            Dim search As New DirectoryInfo(Application.StartupPath & "\modelli") 'Effettuo la ricerca dei modelli
            Dim files() As System.IO.FileInfo 'Faccio un vettore che conterrà la lista di file contenuti in una directory
            Dim i As Integer
    
            files = search.GetFiles("*.pwm") 'Elenco i file *.pwm della directory modelli
    
            ReDim Preserve ins(UBound(files)) 'ridichiaro gli oggetti in base al numero di elementi del vettore
    
            For i = 0 To UBound(files) 'Controllo tutti i modelli
                Try
                    Dim pat As StreamReader = files(i).OpenText 'Apro il file .pwm per vederne il contenuto
                    Dim b, paramfile() As String 'Buffer e vettore per lo split dei dati
    
                    ins(i) = New Pattern 'Assegno un nuovo oggetto di tipo Pattern
    
                    Do
                        b = pat.ReadLine()   'Leggo la riga
                        If b = Nothing Then Exit Do 'Se la riga è vuota esce dal do
                        paramfile = b.Split(":")    'Splitto la stringa ad ogni ':'
                        Select Case paramfile(0)    'Controllo la prima parte della stringa divisa
                            Case "FILE" : ins(i).PatternFileName = paramfile(1) '
                            Case "LIMIT" : ins(i).PatternLenght = Val(paramfile(1)) ' Riempio l'oggetto Pattern con i dati letti dal file
                            Case "NAME" : ins(i).PatternName = paramfile(1)
                        End Select
                    Loop Until b = Nothing
                    ins(i).PatternConf = files(i).Name
                    pat.Close() 'kiudo il file
                Catch ex As IOException 'Eccezione attivata nel caso in cui ci siano errori di lettura
                    If MsgBox(ex.Message, MsgBoxStyle.Exclamation + MsgBoxStyle.RetryCancel, "Errore durante la lettura del file") = MsgBoxResult.Retry Then i = i - 1
                End Try
            Next i
    
            Dim j As Integer = UBound(ins)
            Dim def As Integer = -1
    
            If j = -1 Then  'controllo se NON ci siano modelli di stampa installati
                MsgBox("Non è stato trovato alcun modello di stampa. Si consiglia di reinstallare il programma", MsgBoxStyle.Critical, "Errore critico")
            Else
                For i = 0 To j  'inserisco i modelli di stampa trovati
                    Dim defaultpattern As String = SetupIniFile.ReadValue("pattern", "default", "")
                    cmbpattern.Items.Add(ins(i).PatternName) 'inserisco un modello di stampa
                    If defaultpattern = ins(i).PatternConf Then def = i 'controllo se è il modello di stampa predefinito
                Next
            End If
            If def <> -1 Then cmbpattern.SelectedIndex = def 'seleziono il modello di stampa impostato di default
    
            '
            '   GESTIONE CONTABILITA'
            '
            cmbcase.SelectedIndex = Val(SetupIniFile.ReadValue("Contabilita", "AggiungiPreventivo", ""))
        End Sub
    
        Private Sub cmdAnnulla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAnnulla.Click
            Me.Close()
        End Sub
    
        Private Sub cmdOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOK.Click
            SetupIniFile.WriteValue("pattern", "default", ins(cmbpattern.SelectedIndex).PatternConf)          'imposto il nuovo modello di stampa predefinito
            SetupIniFile.WriteValue("Contabilita", "AggiungiPreventivo", cmbcase.SelectedIndex.ToString)      'imposto il nuovo caso per la contabilità
            SetupIniFile.FlushToDisk()                                                                        'scrivo fisicamente il file ini sull'harddisk
            Me.Close()
        End Sub


    ins è una var globale

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da FinalFantasy
    il form ha solo questi 3 metodi
    Meglio il codice della routine che chiama questa Form, poichè è in quella parte che - se ho capito bene - si verifica l'errore.

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

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

  5. #5
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    codice:
        Private Sub mnisetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnisetup.Click
            Dim setup As New frmsetup
            setup.ShowDialog()
        End Sub

  6. #6
    L'errore che viene generato è causato dal fatto che tenti di accedere ad un oggetto che ormai non esiste più. Prova ad eseguire in modalità Debug per vedere se riesci a trovare qualcosa perché dal codice postato non riesco a trovare nessun errore...

  7. #7
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    ma l'errore me lo da in modalità debug, in modalità release nn mi da niente...

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.