Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    vb5, non far bloccare il programma

    Ultimamente sto scrivendo vari programmini per calcolare sequenze varie di numeri in visual basic 5.


    codice:
    Private function conta(inizio,fine)
    a=2
    
    for i=inizio to fine
    valorecorrente.text=i
    a=a+i
    next
    
    text3.text=a
    
    End Function
    In programmi tipo questo (scrivo al volo, nn ho controllato se ci sono errori) se vb deve "contare" da 1 a 1000000 il programma si blocca finchè il ciclo non è terminato, e questo è abbastanza difficile da gestire, perchè non si riesce a capire quando il ciclo può terminare...

    nel caso del programma sopre indicato, nella casella di testo valorecorrente, viene visualizzato (dopo l'esecuzione dell'intero ciclo) l'ultimo valore, e non si osserva una progressione graduale...

    La domanda è, non esiste un modo per creare un ciclo "che non fa bloccare il programma", ma viene eseguito aggiornando man mano una casella di testo?

    Domanda 2: come faccio a creare un ciclo che continua finchè non viene fermato da un comando esterno? (come la pressione di un tasto)

    grazie 10000000000000000
    E poi Martina lavava l'anitra miope!

    Pi greco

  2. #2
    per aggiornare il textbox dovrebbe bastare fare text3.refresh.

    Per consentire di annullare l'operazione dovresti aggiungere un bottone che setti una variabile globale che indichi se annullare l'operazione. nel ciclo che hai postato aggiungi un controllo di questa variabile e un doevents...

  3. #3
    per il primo funziona, infatti avevo provato ad aggiornare il form, ma non avevo pensato alla singola casella di testo...

    Per il secondo, il bottone lo posso fare, ma durante il ciclo non lo posso cliccare...
    E poi Martina lavava l'anitra miope!

    Pi greco

  4. #4
    Utente di HTML.it L'avatar di sebamix
    Registrato dal
    Aug 2000
    Messaggi
    1,028
    codice:
    Private function conta(inizio,fine)
        a=2
        for i=inizio to fine
            valorecorrente.text=i
            doevents
            a=a+i
        next
        text3.text=a
    End Function
    doevents

  5. #5
    Utente di HTML.it L'avatar di sebamix
    Registrato dal
    Aug 2000
    Messaggi
    1,028
    Ah, ricorda che doevents e' comodo per non fare sembrare congelata l'applicazione all'utente (e anche al S.O. :quipy: ) ma in generale rallenta molto procedure complesse e lunghe. Se poi ti basi molto su eventi, rischi di incasinare tutto.
    Quindi va usata con cura.


  6. #6
    Se all'interno del ciclo che conta inserisci un doevents ti permette di farlo. In pratica doevents restituisce il controllo al processore ed esegue altre istruzioni in coda ritornando poi il controllo.

    codice:
    public bCanc as boolean
    
    ...
    
    Private Function conta(inizio, fine)
    a = 2
    bcanc=false
    For i = inizio To fine
      valorecorrente.Text = i
      a = a + i
      if bCanc then msgbox "Operazione annullata":exit function
      doevents
    Next
    
    text3.Text = a
    
    End Function
    poi sul pulsante annulla bCanc=true


    O fatto una prova e funziona.


  7. #7
    Utente di HTML.it L'avatar di sebamix
    Registrato dal
    Aug 2000
    Messaggi
    1,028
    A rigor di logica il doevents andrebbe prima dell'if


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.