Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C#] Errore seconda apertura Form

    Salve ragazzi ho un problema con l'apertura di un form. Ho un'applicazione che alla pressione di un pulsante visualizza un altro form, il problema è questo, quando chiudo il secondo form aperto dalla pressione del pulsante e successivamente, nella stessa applicazione, cerco di aprire per la seconda volta questo form, viene visualizzato un errore che dice: Cannot access a disposed object, object name 'form2'. Ho provato allora a gestire l'evento di chiusura di questo form, inserendo in tale metodo l'evento dispose, per liberare eventuali risorse, ma questo problema rimane lo stesso, da cosa può dipendere questo errore? Questo comunque è il codice in questione

    codice:
    public void settaggi_click(object sender, EventArgs e)
    {
                try
                {
    
                    Form2 frm2 = new Form2();
                    frm2 .Show();
                    frm2 .Refresh();
                    frm2 .Activate();
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + ex.StackTrace);
                }
    }
    
            public void setting_FormClosed(object sender, EventArgs e)
            {
                this.frm2.Hide();
                this.frm2.Dispose();
               
            }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Come puoi accedere alla variabile frm2 dal metodo setting_FormClosed se la variabile è locale al metodo
    settaggi_click?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Scusa ho sbagliato a scrivere il codice l'oggetto frm2, è un oggetto globale, quindi può essere usato in tutti i metodi della classe, ma purtroppo non è quello il problema

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    A quale classe appartengono i metodi che hai elencato?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Appartengono ad una classe word document, ma non penso che questo sia utile alla risoluzione del problema. Di solito quell'errore che ho ricevuto, per quale motivo viene causato?

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Volevo solo accertarmi che non si trattasse di metodi appartenenti al Form incriminato.

    Ad ogni modo, se il form deve essere ricreato successivamente per essere visualizzato, perchè invocare Hide invece di Close?

    Credo che la chiamata a Dispose non debba essere inserita; lo stesso per tutti gli altri metodi (Activate, Refresh, ...) che non servono in questo contesto.

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

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

  7. #7
    Se faccio come dici tu, quando dopo aver chiuso il form, tento di aprirlo per la seconda volta, non succede nulla, il form non viene riaperto, da cosa può dipendere questo?

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da GiulioCesare
    Se faccio come dici tu, quando dopo aver chiuso il form, tento di aprirlo per la seconda volta, non succede nulla, il form non viene riaperto, da cosa può dipendere questo?
    Visto che hai detto di aver sbagliato a scrivere il codice, copia e incolla il codice corretto, altrimenti si continueranno ad incriminare errori inesistenti e a non vedere quelli reali.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9
    Ok chiedo scusa se ho fatto un pò di confusione, ecco il codice:
    codice:
    Form2 setting = new Form2();
    public void setting_Click(object sender, EventArgs e)
    {
                try
                {                
                   setting.Show();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + ex.StackTrace);
                }
    }
    
            public void setting_FormClosed(object sender, EventArgs e)
            {
                 setting.Close();
            }
    Per vari motivi, ho bisogno di creare l'oggetto setting come oggetto globale, e non posso creare una sua nuova instanza, all'interno del metodo setting_Click

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Non riesco ad associare gli eventi che hai indicato con l'oggetto a cui si fa riferimento.

    Hanno il prefisso "setting", che è lo stesso indicato setting_FormClosed, come se chiudessi due volte il form alla sua chiusura.

    Lo stesso prefisso è nell'evento setting_Click che invece dovrebbe rispondere ad un pulsante per aprire il form.

    Il codice ha un po' troppe mescolanze e non si riesce a capire bene a cosa si riferisca ogni elemento.

    Suggerirei un ripensamento dell'architettura.

    In linea di massima, se un form viene creato una sola volta, si usa Hide e Show per mostrarlo; Close si può usare qualora non debba essere richiamato o nel caso in cui si crei una nuova istanza ad ogni visualizzazione (come credevo avvenisse).

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

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

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.