Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    87

    Chiusura form da un altra

    Salve a tutti,
    vi spiego il mio problema: ho due form , una principale e una secondaria.
    Quella principale lancia la form secondaria
    dim frm2 as new form2
    frm2.show
    fin qui tutto bene, il problema nasce quando devo chiudere dalla form secondaria quella principale: ho provato a lanciare dalla form secondaria una procedura shared contenuta nella form principale, ma l' istruzione me.close all' interno di un membro shared non funziona.
    Come posso fare allora a chiudere la form principale (senza instanziarla dalla secondaria)??

  2. #2
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    Re: Chiusura form da un altra

    Originariamente inviato da pol86
    Salve a tutti,
    vi spiego il mio problema: ho due form , una principale e una secondaria.
    Quella principale lancia la form secondaria
    dim frm2 as new form2
    frm2.show
    fin qui tutto bene, il problema nasce quando devo chiudere dalla form secondaria quella principale: ho provato a lanciare dalla form secondaria una procedura shared contenuta nella form principale, ma l' istruzione me.close all' interno di un membro shared non funziona.
    Come posso fare allora a chiudere la form principale (senza instanziarla dalla secondaria)??
    in un modulo ho inserito questo:

    Public Class FrmNuovo
    Private Shared m_CustomerForm As frm_nuovo
    Public Shared Property CustomerForm() As frm_nuovo
    Get
    Return m_CustomerForm
    End Get
    Set(ByVal Value As frm_nuovo)
    m_CustomerForm = Value
    End Set
    End Property
    End Class

    nel form index per esempio questo:
    If FrmNuovo.CustomerForm Is Nothing Then
    Dim frmNew As New frm_nuovo()
    frmNew.MdiParent = Me
    frmNew.Show()
    frmNew.WindowState = FormWindowState.Normal
    frmNew.txt_nome.Focus()
    FrmNuovo.CustomerForm = frmNew
    Else
    FrmNuovo.CustomerForm.Show()
    End If
    End Class

    chia chiamerà il form frm_nuovo

    ok?
    Tony

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Re: Chiusura form da un altra

    Originariamente inviato da pol86
    vi spiego il mio problema: ho due form , una principale e una secondaria.
    Quella principale lancia la form secondaria [...]
    Come posso fare allora a chiudere la form principale (senza instanziarla dalla secondaria)??
    E' sufficiente copiare nel form secondario un riferimento al form chiamate, dichiarando un campo pubblico o una proprietà, e usare tale riferimento per chiamare il metodo Close del form per chiuderlo.

    Non vedo comunque l'utilità di usare membri statici. Se vuoi chiudere un form da un altro, entrambi devono essere instanziati, concreti e presenti in memoria, quindi è sufficiente usare un metodo non statico.

    Sul mio blog è presente inoltre un esempio che prevede l'invocazione di metodi e il passaggio di informazioni da un form ad un altro.

    Per chi è abituato a lavorare con linguaggi "object oriented", questa è prassi di tutti i giorni.

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

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    87
    Non riesco a farlo funzionare ,mi restituisce un errore del tipo nullReferenceException.
    Forse non l' ho ancora detto, ma nella form secondaria (form2) non voglio istanziare alcun riferimento alla principale (form1) del tipo: dim frm1 as new form1 e poi frm1.close, perchè in questo caso mi viene richiamato nuovamente il costruttore di form1 che ricordo essere quella principale e ancora aperta sotto alla form2..

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da pol86
    Non riesco a farlo funzionare ,mi restituisce un errore del tipo nullReferenceException.
    Forse non l' ho ancora detto, ma nella form secondaria (form2) non voglio istanziare alcun riferimento alla principale (form1) del tipo: dim frm1 as new form1 e poi frm1.close, perchè in questo caso mi viene richiamato nuovamente il costruttore di form1 che ricordo essere quella principale e ancora aperta sotto alla form2..
    Infatti non devi istanziare nulla, il tuo form1 è già istanziato; devi solo aggiungere una variabile di quel tipo in form2 e copiare il contenuto di form1 in quella variabile affinchè il form2 possa avere un riferimento all'istanza di form1 che l'ha chiamata.

    Attraverso quel riferimento, è possibile chiudere il primo form.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    87
    Mi puoi fare un esempio di codice, che non riesco a capire cosa vuol dire "copiare il contenuto di form1 nella variabile", grazie mille

  7. #7
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    Re: Re: Chiusura form da un altra

    Originariamente inviato da alka
    E' sufficiente copiare nel form secondario un riferimento al form chiamate, dichiarando un campo pubblico o una proprietà, e usare tale riferimento per chiamare il metodo Close del form per chiuderlo.

    Non vedo comunque l'utilità di usare membri statici. Se vuoi chiudere un form da un altro, entrambi devono essere instanziati, concreti e presenti in memoria, quindi è sufficiente usare un metodo non statico.

    Sul mio blog è presente inoltre un esempio che prevede l'invocazione di metodi e il passaggio di informazioni da un form ad un altro.

    Per chi è abituato a lavorare con linguaggi "object oriented", questa è prassi di tutti i giorni.

    Ciao!
    perchè è sbagliato il mio metodo?

    a me funziona benissssimo!!!
    Tony

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Re: Re: Re: Chiusura form da un altra

    Originariamente inviato da tony83
    perchè è sbagliato il mio metodo?
    a me funziona benissssimo!!!
    Non avevo notato il tuo intervento.

    Non ho il tempo di esaminarlo per verificare se è corretto ma... il nostro amico chiede come chiudere un form, e nel tuo caso non c'è nemmeno una chiamata al metodo Close.

    Magari funziona, però forse risolve un problema diverso da quello richiesto. :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da pol86
    Mi puoi fare un esempio di codice, che non riesco a capire cosa vuol dire "copiare il contenuto di form1 nella variabile", grazie mille
    A grandi linee (non ho la possibilità di verificarlo):
    codice:
    '
    ' Form1
    '
    
    Dim Form2Object As New Form2
    Form2Object.CallingForm = Me
    Form2.Show()
    
    '
    ' Form2
    '
    
    Public CallingForm As Form2
    
    ' ...
    
    If Not (CallingForm Is Nothing) Then
      CallingForm.Close()
    End If
    Il codice è a puro titolo esemplificativo, al solo scopo di chiarire il concetto, ma va ovviamente disposto nei punti giusti delle due classi secondo le indicazioni precedenti.

    Ad ogni modo, se non hai dato ancora un'occhiata all'esempio che ho pubblicato sul mio blog, ti consiglio di farlo: non affronta il problema della chiusura, ma c'è comunque una porzione di codice che consente da un form di comunicare col chiamante, nel caso specifico per impostare proprietà, ma da questa operazione all'invocazione di un metodo come Close la strada è breve.

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

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

  10. #10
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    Re: Re: Re: Re: Chiusura form da un altra

    Originariamente inviato da alka
    Non avevo notato il tuo intervento.

    Non ho il tempo di esaminarlo per verificare se è corretto ma... il nostro amico chiede come chiudere un form, e nel tuo caso non c'è nemmeno una chiamata al metodo Close.

    Magari funziona, però forse risolve un problema diverso da quello richiesto. :master:
    a ok scusa. ho usato una classe di appoggio per controllare se il form è aperto o chiuso x non aprire 2 volte lo stesso form, ma pensavo allo stesso tempo che sfruttando la stessa tecnica si potesse risolvere il problema in questione gestendo le proprietà delle classi delle form incrimanate
    Tony

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.