+ Rispondi
Risultati da 1 a 6 di 6

Discussione: Unload Me.. Load Me

  1. #1
    Utente della community L'avatar di StegcO
    reputazione complessiva: 2 2

    Messaggi
    385

    Unload Me.. Load Me

    Non sapevo come descrivere questo mio dubbio, tutto è nato nellaa creazione di un Loader ( vi ricordate? ) per le mie applicazioni, riassuamento controlla se c'è una nuova versione, se c'è la scarica e avvia il programma aggiornato altrimenti si chiude e avvia il programma come al solito.

    Tutto era nato a causa di un problema nel chiudere tutto il programma per fare l'aggiornamento, ed eravamo venuti a capo del problema dicendo che cnviene fare un Loader.

    Ora mi trovo di fronte a un problema che mi era già capitato tempo fa e che avevo aggirato, cioè che, come in questo caso il comando Unload Me, quando lanciato, invece che scaricare la Form me la riesegue, cioè se io alla fine di FormActivate (o FormLoad) metto questo comando invece che andare in QueryUnload mi ricarica tutto il progetto come se lo avessi appena aperto, ecco il codice:

    Codice:
    Option Explicit
    
    Private Sub Form_Load()
    
    '##### Posiziono la Form #####
    
    Me.Top = (Screen.Height - Me.Height) / 2
    Me.Left = (Screen.Width - Me.Width) / 2
    
    frm_main.Caption = " Applicazione"
    
    '##### Controllo se bisogna aggiornare #####
    
    Dim Linea As String
    
    Dim Attuale As Date
    Dim Nuova As Date
    
    '##### Trovo la data della versione in uso #####
    
    Open App.Path & "\Version.ini" For Input As #1
        
        Input #1, Linea
        Attuale = CDate(Linea)
        
    Close #1
    
    '##### Trovo la data dell'ultima versione #####
    
    Open "\\DiscoRete\Applicazioni$\Applicazione\Version.ini" For Input As #1
        
        Input #1, Linea
        Nuova = CDate(Linea)
        
    Close #1
    
    '##### Controllo se bisogna aggiornare #####
    
    If Nuova > Attuale Then
    
        Me.Show
        
        Else
        
        Call Shell("Client.exe", vbNormalFocus)
        
        Unload Me '##### Al momento risolvo con il comando End #####
    
    End If
    
    '##### Inserisco il Change Log #####
    
    Open "\\DiscoRete\Applicazioni$\Applicazione\Change Log.txt" For Input As #1
        
        Do Until EOF(1)
               Input #1, Linea
               txt_change_log.Text = txt_change_log.Text & Linea & vbCrLf
        Loop
        
    Close #1
    
    '##### Svuoto le variabili #####
    
    Linea = 0
    Attuale = 0
    Nuova = 0
    
    End Sub
    
    Private Sub cmd_aggiorna_Click()
    
    Dim FSO As New Scripting.FileSystemObject
    
    FSO.CopyFolder "\\DiscoRete\Applicazioni$\Applicazione", App.Path, True
    
    Call Shell("Client.exe", vbNormalFocus)
        
    Unload Me
    
    End Sub
    Sono io che non sò cos'è l'Unload ed è normale che faccia così o sbaglio qualcosa? A rigor di logica io mi immagino che con questo comando mi si interrompa l'esecuzione e, appunto, vada nella Sub Form_Unload(Cancel As Integer) o QueryUnload o se dovesse mancare chiuda tutto.
    Ultima modifica di StegcO; 16-03-2010 alle 17:19
    Luca Corrarati .it
    MDB/ASP/VB6 Developer & IntraNet Administrator

  2. #2
    Very Important Person L'avatar di Brontolo
    reputazione complessiva: 28 28

    Messaggi
    1,162
    Citazione Originariamente Scritto da StegcO Visualizza Messaggio
    A rigor di logica io mi immagino che con questo comando mi si interrompa l'esecuzione e...
    ...e quindi, come potrebbero essere eseguite le istruzioni successive, cioè quelle che hai intitolato "Inserisco il Change log" ?
    Queste istruzioni tentano di riempire una TextBox - mi pare - che è contenuta nel form che tenti di scaricare.

    Un'altra cosa: a cosa serve quello che chiami "Svuoto le variabili" ?
    Il regolamento del forum: la prima cosa da leggere.

  3. #3
    Utente della community L'avatar di StegcO
    reputazione complessiva: 2 2

    Messaggi
    385
    Citazione Originariamente Scritto da Brontolo Visualizza Messaggio
    ...e quindi, come potrebbero essere eseguite le istruzioni successive, cioè quelle che hai intitolato "Inserisco il Change log" ?
    Queste istruzioni tentano di riempire una TextBox - mi pare - che è contenuta nel form che tenti di scaricare.
    Quindi Unload Me deve necessariamente essere l'ultima istruzione di una Sub, altrimenti esistendo istruzioni dopo questo comando si riparte col ricaricare tutto il form?

    E, per esempio, come in questo in cui io devo popolare quella Texbox SOLO se si verifica una condizione, e quando non succede voglio troncare il tutto come farebbe il tanto deprecato End?

    Citazione Originariamente Scritto da Brontolo Visualizza Messaggio
    Un'altra cosa: a cosa serve quello che chiami "Svuoto le variabili" ?
    Riporto le variabili al valore iniziale, se è testo ="" se è numerica =0 ecc, lo faccio più che altro per ricordarmi in ogni Sub quali variabili uso e quali sono sono invece globali, oltre al fatto che quando mi insegnarono VB6 mi dissero che così facendo libero spazio in memoria (un pò come quando si distrugge Rs o Conn).
    Luca Corrarati .it
    MDB/ASP/VB6 Developer & IntraNet Administrator

  4. #4
    Moderatore Globale L'avatar di TheTruster
    reputazione complessiva: 92 92

    Messaggi
    6,531
    Blogs
    3
    Sinceramente non vedo perchè impelagarsi gestendo tutto dal Form, che comunque è soggetto almeno al suo caricamento. Se devi eseguire del codice a prescindere dall'utilizzo del Form, come il controllo della versione, non è necessario affatto sfruttare il Form, basta la Sub Main():

    Codice:
    Sub Main()
    '##### Trovo la data della versione in uso #####
    '...
    '##### Trovo la data dell'ultima versione #####
    '...
    '##### Controllo se bisogna aggiornare #####
    If Nuova > Attuale Then
        frmDiAggiornamento.Show vbModal
    End If
    
    Call Shell("Client.exe", vbNormalFocus)
    
    End Sub
    Nel Form dovrai gestire solo la scelta di aggiornare o meno il programma e comunque, alla sua chiusura, verrà lanciato il Client.

    Fine dei giochi...

    TheTruster




  5. #5
    Very Important Person L'avatar di Brontolo
    reputazione complessiva: 28 28

    Messaggi
    1,162
    Citazione Originariamente Scritto da StegcO Visualizza Messaggio
    Quindi Unload Me deve necessariamente essere l'ultima istruzione di una Sub, altrimenti esistendo istruzioni dopo questo comando si riparte col ricaricare tutto il form?
    Diciamo che è all'incirca così.
    Citazione Originariamente Scritto da StegcO Visualizza Messaggio
    E, per esempio, come in questo in cui io devo popolare quella Texbox SOLO se si verifica una condizione, e quando non succede voglio troncare il tutto come farebbe il tanto deprecato End?
    Un modo può essere Unload Me seguito da Exit Sub. Un altro può essere GoTo ad una label posta subito prima dell' Exit Sub. Meglio sarebbe mettere l' Unload Me in un ramo di If e le altre istruzioni nell'altro ramo, in modo che si escludano a vicenda.

    Citazione Originariamente Scritto da StegcO Visualizza Messaggio
    Riporto le variabili al valore iniziale, se è testo ="" se è numerica =0 ecc, lo faccio più che altro per ricordarmi in ogni Sub quali variabili uso e quali sono sono invece globali, oltre al fatto che quando mi insegnarono VB6 mi dissero che così facendo libero spazio in memoria (un pò come quando si distrugge Rs o Conn).
    No. Le variabili locali vengono distrutte automaticamente al termine della routine. Per distinguerle da quelle globali sarebbe bene usare una notazione convenzionale; per esempiio prefissare quelle globali con la lettera "g". In ogni caso assegnare un valore di stringa vuota o di zero ad una variabile non può essere considerata una liberazione di memoria, visto che la variabile continuerebbe ad esistere. Diverso è il discorso per le variabili oggetto (connessioni, recordset, comandi ecc.) per le quali, infatti, esiste l'apposita impostazione a Nothing.

    Comunque, l'osservazione di TT, che è arrivata mentre scrivevo, ti libera da un sacco di inconvenienti.
    Il regolamento del forum: la prima cosa da leggere.

  6. #6
    Utente della community L'avatar di StegcO
    reputazione complessiva: 2 2

    Messaggi
    385
    Grazie per i consigli, per risolvere è bastato mettere

    Codice:
    '##### Inserisco il Change Log #####
    
    Open "\\DiscoRete\Applicazioni$\Applicazione\Change Log.txt" For Input As #1
        
        Do Until EOF(1)
               Input #1, Linea
               txt_change_log.Text = txt_change_log.Text & Linea & vbCrLf
        Loop
        
    Close #1
    dentro la IF, in questo modo carica la txt_change_log solo se necessario, e in questo modo l'Unload Me fa il suo sporco lavoro.

    Grazie a tutti
    Luca Corrarati .it
    MDB/ASP/VB6 Developer & IntraNet Administrator

+ Rispondi

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi