Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    102

    [VB6] pausa ciclo do while

    Buona sera a tutti,
    Qualcuno sa come posso fare una pausa dentro ad un ciclo do while fino alla pressione di un nuovo command button ??

    Mi spiego meglio:
    Ho un command che fa partire una lettura in Input di un txt nel quale ogni riga devo estrarla e poi visualizzare le variabili estratte in delle label e attendere la pressione di un command.

    In altre parole il ciclo è sulla lettura del file (Do While Not EOF(1))
    Nel file c'è una specie di lista
    Ogni riga ha + variabili da estrarre
    Ad ogni fine riga estratta io visualizzo le variabili in altrettante label sul form
    E poi devo attendere il Click di un command prima di passare alla riga successiva.


    Ringrazio anticipatamente

    Gianluca

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Perche' non visualizzi tutto quello che ti serve in una ListBox o in una ListView in una sola volta ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    102
    perchè nel file ho i campi tipo :
    -Nome
    -Indirizzo
    -cap
    -città

    poi deve uscirmi una text in cui inserisco un indirizzo mail
    e poi con un command invio l'email

    però essendo la lettura del file in un ciclo do while non so come interromperlo per poi attendere il click del command.

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: [VB6] pausa ciclo do while

    Non si capisce niente.

    Originariamente inviato da zanlu88s
    Buona sera a tutti,
    Qualcuno sa come posso fare una pausa dentro ad un ciclo do while fino alla pressione di un nuovo command button ??
    Quale nuovo command? Dov'è?

    Originariamente inviato da zanlu88s
    Mi spiego meglio:
    Ho un command che fa partire una lettura in Input di un txt nel quale ogni riga devo estrarla e poi visualizzare le variabili estratte in delle label e attendere la pressione di un command.
    Ancora non sei chiaro. Quale command? Dov'è?

    Originariamente inviato da zanlu88s
    In altre parole il ciclo è sulla lettura del file (Do While Not EOF(1))
    Nel file c'è una specie di lista
    E' una lista o non è una lista?

    Originariamente inviato da zanlu88s
    Ogni riga ha + variabili da estrarre
    Una riga NON PUO' avere variabili!
    Vuol dire che ogni riga CONTIENE più valori?

    Originariamente inviato da zanlu88s
    Ad ogni fine riga estratta io visualizzo le variabili in altrettante label sul form
    Ancora variabili...

    Originariamente inviato da zanlu88s
    E poi devo attendere il Click di un command prima di passare alla riga successiva.
    [/QUOTE]
    Quale command?
    Perchè devi attendere?

    Se non spieghi in modo dettagliato, è impossibile interpretare quello che scrivi.


  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    102
    codice:
    Open App.Path & "/sped.txt" For Input As #1
    
    Do While Not EOF(1)
    Line Input #1, linea
    
    pos = InStr(1, linea, "-")
    
    num = Mid(linea, 1, pos - 2)
    
    Label1.Caption = num
    
    pos1 = InStr(pos + 1, linea, "-")
    
    nome = Mid(linea, pos + 2, pos1 - pos - 3)
    
    Label2.Caption = nome
    
    pos2 = InStr(pos1 + 1, linea, "-")
    
    indir = Mid(linea, pos1 + 2, pos2 - pos1 - 3)
    
    Label3.Caption = indir
    
    pos3 = InStr(pos2 + 1, linea, "-")
    
    cap = Mid(linea, pos2 + 2, pos3 - pos2 - 3)
    
    Label4.Caption = cap
    
    
    citta = Mid(linea, pos3 + 2, Len(linea) - pos3)
    
    Label5.Caption = citta
    Loop
    Close #1
    Come puoi vedere apro un file txt
    Ogni riga di questo file contiene delle parti di testo separati da dei "-"
    Io trovo i "-" e spezzo la riga in + variabili
    mostro poi le variabili in alcune label
    quando tutte le label sono complete ho necessità di non proseguire il ciclo (perchè se no si va sulla riga successiva del file txt )
    ma devo eseguire un click su un command button (già presente sul form di cui sto parlando)

    Dopo aver settato Label5.caption (e quindi anche le precedenti ) come posso interrompere il ciclo fino al click di un command button ??


    Spero di essere stato + chiaro e mi scuso per la precedente confusione

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ti ripeto ... perche' non usi una ListView per inserire tutte le righe con tutti i campi ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    102
    perchè devo necessariamente fare degli STEP tra una riga e l'altra del file.
    Questo perchè ogni riga contiene nome, indirizzo cap e città e a fianco a questi dati devo inserire l'email in una text e poi dare il click ad un command ( che invii una mail contenete i dati appena citati).

    Se io facessi delle liste contenti tutti i dati, non potrei far inserire per ogni riga (della lista e quindi del file) l'email nel campo text e quindi non otterrei il risultato che mi servirebbe.

    Per meglio farti comprendere sul mio form ho 5 label, 1 text e un command button

    le 5 label si riempiono settando la caption quando individuo le variabili nella riga del file

    la text è per inserire manualmente il campo email

    il command per inviare l'email con i dati all'indirizzo del text

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Andiamo per ordine:

    1. Sconsiglio di tenere aperto il file TXT così a lungo.
    Carica il file completo in una variabile, ed usa quella.
    Puoi usare questa funzione:
    codice:
    Public Function GetTextFile(ByVal sPathFile As String, _
            Optional ByVal bBinaryMode As Boolean = False) As String
        Dim fnum As Integer
        fnum = FreeFile()
        If bBinaryMode Then
            Open sPathFile For Binary As #fnum
        Else
            Open sPathFile For Input As #fnum
        End If
        GetTextFile = Input(LOF(fnum), fnum)
        Close #fnum
    End Function
    2. Devi creare alcune variabili a livello di Form (Dichiarazioni)
    codice:
    Dim bFatto as Boolean
    Dim i as long
    Dim sValori() As String
    Dim sTestoFile As String
    Dim sRighe() As String

    3. Ora veniamo al ciclo, e semplifichiamo ed ottimizziamo anche quello.
    In questo codice, tutto il codice viene eseguito dal pulsante Command2:
    codice:
    Private Sub Command2_Click()
        ' carico il file in una variabile
        sTestoFile = GetTextFile(App.Path & "\sped.txt")
        ' suddivido le righe nell'array sRighe
        sRighe = Split(sTestoFile, vbCrLf)
            
        ' Leggo ogni riga, ed estraggo i valori:
        For i = 0 To UBound(sRighe)
            ' recupero i valori separati da '-'
            sValori = Split(sRighe(i), "-")
            Label1.Caption = sValori(0)  ' è num
            Label2.Caption = sValori(1)  ' è nome
            Label3.Caption = sValori(2)  ' è indir
            Label4.Caption = sValori(3)  ' è cap
            Label5.Caption = sValori(4)  ' è citta
        
            bFatto = False    ' questo blocca il ciclo ad ogni riga
            Rem Ora attendiamo che l'utente abbia fatto clic sul pulsante
            Do While Not bFatto
                ' fino a che bFatto è uguale a False, non esce dal ciclo
                DoEvents
            Loop
        Next i
    End Sub
    4. Importante:
    Nell'evento Click del pulsante dovrai impostare bFatto = True :

    codice:
    Private Sub Command1_Click()
        ' al clic dell'utente: 
        ' qui esegui il tuo codice...
        '
        ' dopo di chè facciamo proseguire il loop e leggere la riga seguente
        bFatto = True
    End Sub
    Dovrebbe andar bene così.

    S.E. & O.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da zanlu88s
    Se io facessi delle liste contenti tutti i dati, non potrei far inserire per ogni riga (della lista e quindi del file) l'email nel campo text e quindi non otterrei il risultato che mi servirebbe.
    Neanche per sogno ... potresti farlo tranquillamente, invece di scrivere un programma che, secondo me, non ha senso ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Io affronterei in modo diverso il problema, condivido la soluzione di Gibra nell'acquisire
    il file e porlo in una variabile, però eviterei di mantenere bloccato il ciclo for con un ciclo interno.

    Col primo Command Potresti caricarti il file in memoria e riempire le tue textbox con il primo
    elemento nell'array

    Con il click sul secondo Command potresti inviare la Mail e richiamare una funzione che carica i dati dell'elemento successivo nelle tue TextBox

    riprendendo parte del codice scritto da gibra:

    codice:
    Private Sub Command1_Click()
        ' carico il file in una variabile
        sTestoFile = GetTextFile(App.Path & "\sped.txt")
        ' suddivido le righe nell'array sRighe
        arRighe = Split(sTestoFile, vbCrLf)
        iArraySize = UBound(arRighe)
        CaricaDatiNelleTextBox arRighe(0)
    
    End Sub
    
    Private Sub CaricaDatiNelleTextBox(strRigaDiValori as string)
    
            sValori = Split(strRigaDiValori , "-")
            Label1.Caption = sValori(0)  ' è num
            Label2.Caption = sValori(1)  ' è nome
            Label3.Caption = sValori(2)  ' è indir
            Label4.Caption = sValori(3)  ' è cap
            Label5.Caption = sValori(4)  ' è citta
    
    end sub
    
    Private Sub Command2_Click()
        'Al click del pulsante richiami il codice che ti invia la mail
        '...
    
        'Incrementi una variabile che ti indica quale elemento visualizzare che hai a livello di
        'form e che è inizialmente impostata a 0
        iElementoDaVisualizzare = iElementoDaVisualizzare + 1
        if iElementoDaVisualizzare > iArraySize then
           exit sub
        end if
        
        CaricaDatiNelleTextBox arRighe(iElementoDaVisualizzare )
    
    End Sub
    PS il codice non l'ho provato, sicuramente manca la dichiarazione di qualche variabile che
    però penso sia facile da intuire.
    My 2 cents.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.