none
[VB 2013] Eccezione non gestita. RRS feed

  • Domanda

  • Buonasera a tutti, nel progetto che sto sviluppando, ho notato che se mando in esecuzione tramite DEBUG funziona tutto, se invece vado nella cartella RELEASE e lancio il file exe dell'applicazione quando apro un form (Lavorazioni) mi da questo errore:

    nella finestra elenca questo:

    Le informazioni su come richiamare il debug JIT (Just-In-Time) anziché questa finestra
    sono riportate in fondo al messaggio.
    
    ************** Testo dell'eccezione **************
    System.ArgumentOutOfRangeException: Index e length devono fare riferimento a una posizione nella stringa.
    Nome parametro: length
       in System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
       in GestionaleDitta.frm_Lavorazione.frm_Lavorazione_Activated(Object sender, EventArgs e) in 
    	C:\Users\utente\Documents\Visual Studio 2013\Projects\GestionaleDitta\GestionaleDitta\frm_Lavorazione.vb:riga 128
       in System.Windows.Forms.Form.OnActivated(EventArgs e)
       in System.Windows.Forms.Form.set_Active(Boolean value)
       in System.Windows.Forms.Form.ActivateMdiChildInternal(Form form)
       in System.Windows.Forms.Form.WmMdiActivate(Message& m)
       in System.Windows.Forms.Form.WndProc(Message& m)
       in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    
    
    ************** Assembly caricati **************
    mscorlib
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18444 built by: FX451RTMGDR
        Base di codice: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
    ----------------------------------------
    GestionaleDitta
        Versione assembly: 1.0.0.0
        Versione Win32: 1.0.0.0
        Base di codice: file:///C:/Users/utente/Documents/Visual%20Studio%202013/Projects/GestionaleDitta/GestionaleDitta/bin/Release/GestionaleDitta.exe
    ----------------------------------------
    Microsoft.VisualBasic
        Versione assembly: 10.0.0.0
        Versione Win32: 11.0.50938.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
    ----------------------------------------
    System
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Core
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
    ----------------------------------------
    System.Windows.Forms
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System.Configuration
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Xml
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.34234 built by: FX452RTMGDR
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    System.Runtime.Remoting
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.34108 built by: FX45W81RTMGDR
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
    ----------------------------------------
    mscorlib.resources
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_it_b77a5c561934e089/mscorlib.resources.dll
    ----------------------------------------
    System.Data
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
    ----------------------------------------
    Microsoft.VisualBasic.PowerPacks
        Versione assembly: 12.0.0.0
        Versione Win32: 12.0.21005.1
        Base di codice: file:///C:/Users/utente/Documents/Visual%20Studio%202013/Projects/GestionaleDitta/GestionaleDitta/bin/Release/Microsoft.VisualBasic.PowerPacks.DLL
    ----------------------------------------
    System.Data.DataSetExtensions
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Data.DataSetExtensions/v4.0_4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll
    ----------------------------------------
    System.Numerics
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
    ----------------------------------------
    System.Windows.Forms.resources
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_it_b77a5c561934e089/System.Windows.Forms.resources.dll
    ----------------------------------------
    Accessibility
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
    ----------------------------------------
    System.Transactions
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll
    ----------------------------------------
    System.EnterpriseServices
        Versione assembly: 4.0.0.0
        Versione Win32: 4.0.30319.18408 built by: FX451RTMGREL
        Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
    ----------------------------------------
    
    ************** Debug JIT **************
    Per abilitare il debug JIT, è necessario impostare il valore
    jitDebugging nella sezione system.windows.forms del file di configurazione
    dell'applicazione o del computer (machine.config).
    L'applicazione inoltre deve essere compilata con il debug
    abilitato.
    
    Ad esempio:
    
    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
    Quando il debug JIT è abilitato, tutte le eccezioni non gestite
    vengono inviate al debugger JIT registrato nel computer,
    anziché essere gestite da questa finestra di dialogo.
    
    

    quello che penso di capire che c'è un parametro che riguarda la lunghezza che non è corretto..ma non riesco a capire cosa....

       in System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
       in GestionaleDitta.frm_Lavorazione.frm_Lavorazione_Activated(Object sender, EventArgs e) in 
    	C:\Users\utente\Documents\Visual Studio 2013\Projects\GestionaleDitta\GestionaleDitta\frm_Lavorazione.vb:riga 128

    se questo che scrive è il riferimento d'errore:

     Private Sub frm_Lavorazione_Activated(sender As Object, e As EventArgs) Handles Me.Activated
            '----- Impostazioni Form ---------------------------------------------------------------------
            Me.WindowState = FormWindowState.Maximized 'espande il form
            formClienti.Size = New Size(1033, 711) 'imposta il nuovo form con il nuovo ridimensionamento
            Me.SitoClienteTextBox.Text = "HTTP://"
            '---------------------------------------------------------------------------------------------
            '----- Disabilita le icone di salvataggio -------------------------------------
            Me.Clienti_SalvaRecord.Enabled = False
            Me.salvaLavorazione_ToolStripButton.Enabled = False
            Me.MaterialiUtilizzati_Salva_ToolStripButton.Enabled = False
            Me.Lavorazioni_Manutenzioni_Salva_ToolStripButton.Enabled = False
            '-------------------------------------------------------------------------------
            '----- Controllo presenza dati Clienti ---------------------------------
            Dim n_RigheCliente As Integer = (Me.Table_ClientiDataGridView.RowCount) - 1
            If n_RigheCliente = 0 Then
                Me.Clienti_Elimina_ToolStripButton.Enabled = False
                disabilita_campiClienti()
            Else
                Me.Clienti_Elimina_ToolStripButton.Enabled = True
                abilita_campiClienti() 'abilita tutti icampi della scheda clienti
                disabilita_campi_code() 'disabilita solo i campi importanti per il codice
    
                'posiziona il tipo di maschera della textbox codice fiscale in base a che tipo è memorizzata nel database
                Dim stringaClienti As String = (Me.Table_ClientiDataGridView.Rows(0).Cells(15).Value.ToString.Substring(0, 6))
    
                If IsNumeric(stringaClienti) = True Then
                    CodFiscaleClienteLabel.Text = "Cod.Fisc.Cond.:"
                    CodFiscaleClienteMaskedTextBox.Mask = "00000000000"
                Else
                    CodFiscaleClienteLabel.Text = "Cod.Fiscale Cliente : "
                    CodFiscaleClienteMaskedTextBox.Mask = "LLLLLL00L00L000L"
                End If
                Me.CodFiscaleClienteMaskedTextBox.Text = Me.Table_ClientiDataGridView.Rows(0).Cells(15).Value.ToString
    
                'posiziona il tipo di maschera della textbox codice fiscale in base a che tipo è memorizzata nel database
                Dim stringaProprietari As String = (Me.Table_LavorazioniDataGridView.Rows(0).Cells(19).Value.ToString.Substring(0, 6))
    
                If IsNumeric(stringaProprietari) = True Then
                    Lavorazioni_CodiceFiscale_Label.Text = "Cod.Fisc.Cond.:"
                    Lavorazioni_CodFiscalePro_MaskedTextBox.Mask = "00000000000"
                ElseIf Lavorazioni_CodiceFiscale_Label.Text = "Cod.Fisc.Cond.:" Then
                    Lavorazioni_CodiceFiscale_Label.Text = "Cod.Fiscale : "
                    Lavorazioni_CodFiscalePro_MaskedTextBox.Mask = "LLLLLL00L00L000L"
                End If
                Me.Lavorazioni_CodFiscalePro_MaskedTextBox.Text = Me.Table_LavorazioniDataGridView.Rows(0).Cells(19).Value.ToString
            End If
        End Sub 'ImputBox per scrittura del campo da ricercare

    La riga evidenziata è la riga 128......

    sapete darmi un aiuto per capire?

    Grazie Guido

    domenica 28 settembre 2014 16:12

Risposte

Tutte le risposte

  • Ciao Guido,

    come prima cosa verifica se veramente è quella la riga che genera la tua eccezione; semplicemente compilando una versione del tuo programma con quella riga di codice commentata.

    Il fatto che il tuo problema non si presenti in debug, lascia intendere che sia dovuto a problemi di tempi di esecuzione del codice: probabilmente viene eseguita una porzione di codice prima di un'altra che fa generare la tua eccezione.

    Ho notato che l'uso di quella proprietà cambia l'ordine di esecuzione degli eventi del tuo form, e potrebbe essere questo fatto a fare andare in errore il tuo codice.

    https://connect.microsoft.com/VisualStudio/feedback/details/288032/forms-activated-event-occurs-before-load-event-when-windowstate-is-formwindowstate-maximized

    lunedì 29 settembre 2014 07:11
  • Ciao Fabio, grazie proverò a spostare la massimizzazione del form o addirittura toglierla per vedere.

    Guido

    lunedì 29 settembre 2014 11:16
  • Remmando solo la riga dove c'è la massimizzazione del form non cambia nulla, da l'errore sulla riga successiva, ma selezionando tutte le righe presenti nel parte

    Private Sub frm_Lavorazione_Activated(sender As Object, e As EventArgs) Handles Me.Activated
         
        End Sub
    e copiando tutto nella parte Load non da più errore, credo che possa provare a trasferire pezzi ci codice per vedere cosa genera l'errore...giusto?

    lunedì 29 settembre 2014 11:22
  • Buongiorno, ho provato a scorporare il listato, spostando pezzi dalla sezione Activated alla Load, visto che in precedenza...spostando tutto il contenuto il problema non si verificava.

    Nonostante l'errore scrivesse un riferimento di riga...non era quella a creare il problema, ma la parte finale di alcune istruzioni che riporto di seguito, spostando la parte evidenziata nella sezione Load il problema non si verifica più.

    Private Sub frm_Lavorazione_Activated(sender As Object, e As EventArgs) Handles Me.Activated
            
            '----- Impostazioni Form ---------------------------------------------------------------------
            Me.WindowState = FormWindowState.Maximized 'espande il form
            formClienti.Size = New Size(1033, 711) 'imposta il nuovo form con il nuovo ridimensionamento
            Me.SitoClienteTextBox.Text = "HTTP://"
            '---------------------------------------------------------------------------------------------
    
            '----- Disabilita le icone di salvataggio -------------------------------------
            Me.Clienti_SalvaRecord.Enabled = False
            Me.salvaLavorazione_ToolStripButton.Enabled = False
            Me.MaterialiUtilizzati_Salva_ToolStripButton.Enabled = False
            Me.Lavorazioni_Manutenzioni_Salva_ToolStripButton.Enabled = False
            '------------------------------------------------------------------------------- 
    
        End Sub 
    
        Private Sub frm_Lavorazione_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            '----- Controllo presenza dati Clienti ---------------------------------
            Dim n_RigheCliente As Integer = (Me.Table_ClientiDataGridView.RowCount) - 1
            If n_RigheCliente = 0 Then
                Me.Clienti_Elimina_ToolStripButton.Enabled = False
                disabilita_campiClienti()
            Else
                Me.Clienti_Elimina_ToolStripButton.Enabled = True
                abilita_campiClienti() 'abilita tutti icampi della scheda clienti
                disabilita_campi_code() 'disabilita solo i campi importanti per il codice
    
                'posiziona il tipo di maschera della textbox codice fiscale in base a che tipo è memorizzata nel database
                Dim stringaClienti As String = (Me.Table_ClientiDataGridView.Rows(0).Cells(15).Value.ToString.Substring(0, 6))
    
                If IsNumeric(stringaClienti) = True Then
                    CodFiscaleClienteLabel.Text = "Cod.Fisc.Cond.:"
                    CodFiscaleClienteMaskedTextBox.Mask = "00000000000"
                Else
                    CodFiscaleClienteLabel.Text = "Cod.Fiscale Cliente : "
                    CodFiscaleClienteMaskedTextBox.Mask = "LLLLLL00L00L000L"
                End If
                Me.CodFiscaleClienteMaskedTextBox.Text = Me.Table_ClientiDataGridView.Rows(0).Cells(15).Value.ToString
    
                'posiziona il tipo di maschera della textbox codice fiscale in base a che tipo è memorizzata nel database
                Dim stringaProprietari As String = (Me.Table_LavorazioniDataGridView.Rows(0).Cells(19).Value.ToString.Substring(0, 6))
    
                If IsNumeric(stringaProprietari) = True Then
                    Lavorazioni_CodiceFiscale_Label.Text = "Cod.Fisc.Cond.:"
                    Lavorazioni_CodFiscalePro_MaskedTextBox.Mask = "00000000000"
                ElseIf Lavorazioni_CodiceFiscale_Label.Text = "Cod.Fisc.Cond.:" Then
                    Lavorazioni_CodiceFiscale_Label.Text = "Cod.Fiscale : "
                    Lavorazioni_CodFiscalePro_MaskedTextBox.Mask = "LLLLLL00L00L000L"
                End If
                Me.Lavorazioni_CodFiscalePro_MaskedTextBox.Text = Me.Table_LavorazioniDataGridView.Rows(0).Cells(19).Value.ToString
            End If
    
    
            'TODO: questa riga di codice carica i dati nella tabella 'Database_PreventiviDataSet.Table_Preventivi'. È possibile spostarla o rimuoverla se necessario.
            Me.Table_PreventiviTableAdapter.Fill(Me.Database_GestioneDataSet.Table_Preventivi)
            'TODO: questa riga di codice carica i dati nella tabella 'Database_GestioneDataSet.Table_Manutenzioni'. È possibile spostarla o rimuoverla se necessario.
            Me.Table_ManutenzioniTableAdapter.Fill(Me.Database_GestioneDataSet.Table_Manutenzioni)
    
            'TODO: questa riga di codice carica i dati nella tabella 'Database_ConfigurazioneDataSet.Table_Fornitori'. È possibile spostarla o rimuoverla se necessario.
            Me.Table_FornitoriTableAdapter.Fill(Me.Database_GestioneDataSet.Table_Fornitori)
            'TODO: questa riga di codice carica i dati nella tabella 'Database_ConfigurazioneDataSet.Table_Iva'. È possibile spostarla o rimuoverla se necessario.
            Me.Table_IvaTableAdapter.Fill(Me.Database_GestioneDataSet.Table_Iva)
            'TODO: questa riga di codice carica i dati nella tabella 'Database_ConfigurazioneDataSet.Table_Iva'. È possibile spostarla o rimuoverla se necessario.
            'Me.Table_IvaTableAdapter.Fill(Me.Database_ConfigurazioneDataSet.Table_Iva)
            'TODO: questa riga di codice carica i dati nella tabella 'Database_GestioneDataSet.Table_MaterialiUtilizzati'. È possibile spostarla o rimuoverla se necessario.
            Me.Table_MaterialiUtilizzatiTableAdapter.Fill(Me.Database_GestioneDataSet.Table_MaterialiUtilizzati)
            'TODO: questa riga di codice carica i dati nella tabella 'Database_GestioneDataSet.Table_Lavorazioni'. È possibile spostarla o rimuoverla se necessario.
            Me.Table_LavorazioniTableAdapter.Fill(Me.Database_GestioneDataSet.Table_Lavorazioni)
            'TODO: questa riga di codice carica i dati nella tabella 'DataBase_GestioneDataSet.Table_Clienti'. È possibile spostarla o rimuoverla se necessario.
            Me.Table_ClientiTableAdapter.Fill(Me.Database_GestioneDataSet.Table_Clienti)
            '----------------------------------------------------------------------------------------------------------------------------------------------------------------
    
            frm_Gestione.Principale_ToolStripStatusLabel.Text = "---" 'Predispone il testo della toolstrip
        End Sub

    Considerando il fatto che il forma in questione viene richiamato dal menù di un form padre, molto probabilmente tendeva a effettuare dei controlli su campi ancora non pronti e da qui l'errore....almeno cosi credo, corregetemi se sbaglio.

    Quindi...Fabio...avevi ragione nel dirmi di controllare bene se era la riga indicata a creare il problema, grazie Fabio.

    Guido


    • Modificato Guido.G sabato 4 ottobre 2014 07:59
    sabato 4 ottobre 2014 07:58