Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    669

    Errore null Exception in me.dispose

    Ciao a tutti.

    Ho una form con un datagridview e delle textbox, quando la chiudo tramite il pulsante creato (cmdEsci) eseguo il codice:

    me.close
    me.dispose

    normalmente tutto funziona tranquillamente ma con questa form no, una volta chiusa mi appare un errore di null exception.
    Se elimino la riga me.dispose tutto funziona ma la form non viene scaricata e invece io ho bisogno che venga scaricata.
    la form viene richiamata da una seconda form in modalità showdialog e ho notato che se invece da apro con il metodo show il dispose funziona correttamente.
    Nella finestra di controllo immediato mi appare questo errore:

    Eccezione first-chance di tipo 'System.NullReferenceException' in System.Windows.Forms.dll

    Cosa sto sbagliando? non capisco.

    Aiuto!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    669
    guardando il dettaglio dell'eccezione ho scoperto che il problema deriva dal tooltip presente sulla form:

    System.NullReferenceException è stata individuata
    > > Message="Riferimento a un oggetto non impostato su un'istanza di oggetto."
    > > Source="System.Windows.Forms"
    > > StackTrace:
    > > in System.Windows.Forms.ToolTip.WndProc(Message& msg)
    > > in System.Windows.Forms.ToolTip.ToolTipNativeWindow.W ndProc(Message&
    > > m)
    > > in System.Windows.Forms.NativeWindow.DebuggableCallba ck(IntPtr hWnd,
    > > Int32 msg, IntPtr wparam, IntPtr lparam)
    > > in
    > > System.Windows.Forms.UnsafeNativeMethods.IntDestro yWindow(HandleRef hWnd)
    > > in System.Windows.Forms.UnsafeNativeMethods.DestroyWi ndow(HandleRef
    > > hWnd)
    > > in System.Windows.Forms.NativeWindow.DestroyHandle()
    > > in System.Windows.Forms.Control.DestroyHandle()
    > > in System.Windows.Forms.Control.Dispose(Boolean disposing)
    > > in System.Windows.Forms.Form.Dispose(Boolean disposing)
    > > in GenForm.frmTrova.Dispose(Boolean disposing) in
    > > E:\SviluppoGestionali\Progetti_VB_Net\Form_General \GenForm\frmTrova.Designer
    > > .vb:riga 11
    > > in System.ComponentModel.Component.Dispose()
    > > in GenForm.frmCAB.TrovaRecord() in
    > > E:\SviluppoGestionali\Progetti_VB_Net\Form_General \GenForm\frmCAB.vb:riga
    > > 381

    Se infatti elimino il tooltip non ho piu errori
    Se inserisco il tooltip sulla form ma non assegno nessun testo ai controlli tutto funziona
    Ma se inserisco del testo nella proprietà tooltip dei controlli ecco che ricevo l'errore.

    Non capisco cosa significhi questo errore. Anche perchè lo da solo se apro la form con showdialog.
    E' forse possibile che non si possa inserire un oggetto tooltip in una form aperta con showdialog? mi sembra però una cosa assurda.

    aiuto!

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    669
    perfetto!
    ho risolto aprendo la form cosi.

    using myDGForm as new miaForm
    myDGForm.showdialog
    end using

    in questo modo basta utilizzare il metodo close perchè dichiarando cosi l'apertura della form il dispose viene fatto in automatico non appena la form non è piu utilizzata.

    saluti

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Io non ho compreso la tua necessità di invocare Dispose a tutti i costi.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    669
    la form puo essere richiamata da piu form e ogni volta i suoi controlli devo avere caratteristiche diverse.

    Se non effettuo il dispose le form mi rimane con in memoria le caratteristiche passate precedentemente.

    Per esempio la larghezza delle colonne di una listbox, oppure il testo in alcune textbox.

    ciao

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da kolore
    la form puo essere richiamata da piu form e ogni volta i suoi controlli devo avere caratteristiche diverse.
    Se non effettuo il dispose le form mi rimane con in memoria le caratteristiche passate precedentemente.
    Sospettavo un problema del genere. Non è una condizione dovuta alla mancanza della chiamata a Dispose, ma è un errore logico probabilmente legato al fatto che, quando ti serve un form, non ne crei una nuova istanza ma riutilizzi quella esistente.

    A quanto hai detto, ogni Form deve utilizzare una nuova "copia" del Form di cui stai tentando di fare la Dispose, pertanto deve creare semplicemente un'istanza con New.

    Il Dispose, in questo caso, non c'entra nello specifico.

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

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

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    669
    Scusa il ritardo nella risposta ma ho ancora un problema.

    Se io richiamo la maschera con new questa mi si apre e dalla maschera aperta se la chiudo con me.close si chiude.
    ma se la voglio chiudere dalla maschera chiamante la form non si chiude ma nello stesso tempo non mi restituisce errore.

    Perchè?

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da kolore
    Se io richiamo la maschera con new questa mi si apre e dalla maschera aperta se la chiudo con me.close si chiude.
    ma se la voglio chiudere dalla maschera chiamante la form non si chiude ma nello stesso tempo non mi restituisce errore.
    Posta il codice, probabilmente c'è un errore nell'uso degli oggetti Form.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    669
    per aprire il form scrivo:

    dim MyDGForm as new frmTrova
    MyDGForm.showdialog

    Successivamnete sulla form appena aperta clicco un pulsante che lancia una public sub sulla form chiamante e in questa sub vado a chiudere la form aperta scrivendo:

    frmtrova.close


    tutto qui.

  10. #10
    Non puoi chiamare il metodo Close sull'oggetto globale frmTrova, perché il form aperto in quel momento è quello referenziato dalla variabile MyDGForm, e non dalla variabile globale nascosta frmTrova; la cosa più semplice che puoi fare è modificare la Sub che viene chiamata in modo da accettare un parametro di tipo frmTrova che rappresenta il form da chiudere: quando chiami la sub in questione dall'istanza di frmTrova passa Me come argomento.
    In ogni caso il modo di lavorare che stai utilizzando è tipico di VB6, ma non di VB.NET; ti consiglio di leggerti qualche libro per apprendere le nuove tecniche di programmazione in ambito Windows Forms.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.