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

    [VB6] variabile integer non s'incrementa...

    Questo è il codice che ho scritto:

    Private Sub Form_Load()
    Dim num As Integer
    num = 0
    End Sub

    Private Sub Timer1_Timer()
    Label1.Caption = CStr(num)
    num = num + 1
    End Sub

    Perché alla variabile num risulta un valore vuoto? In poche parole la Label1 non mostra numeri ma rimane vuota. Ho messo un punto di interruzione alla riga num = num + 1 e il valore di num è "vuoto"... perché?
    Mi sembra di essere un deficiente con questa domanda, ma passare da vb.net a vb6 è traumatizzante...

  2. #2
    num è dichiarata come variabile locale della procedura Form_Load, come pretendi di incrementarla da Timer1_Timer? Devi dichiararla a livello di form! Il fatto che non ti dia errori dipende dalla maledetta funzionalità di dichiarazione implicita delle variabili di VB6.
    P.S.: sezione errata...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In pratica (come dice MItaly) deve essere

    codice:
    Dim num As Integer
    
    Private Sub Form_Load()
    num = 0
    End Sub
    
    Private Sub Timer1_Timer()
    Label1.Caption = CStr(num)
    num = num + 1
    End Sub
    In effetti e' una cosa semplice ma non dipende dal VB6 o VB.NET ...

    P.S. Stai passando dal VB.NET al VB6 ... ?

  4. #4
    Ok, tutto chiaro (in realtà lo sapevo ma sono andato in palla...). Questo è il codice che mi permette di sapere quanto tempo tengo premuto un pulsante visualizzando una messagebox al rilascio dello stesso. Funziona tutto ma... prima di dichiarare una variabile all'interno della form l'avevo dichiarata nello stesso modo ma in un modulo esterno (Dim tempo As Integer), non funzionava, cioè il numero era sempre 1, cosa sbagliavo?

    Dim tempo As Integer

    Private Sub btnA_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    tempo = 0
    Timer1.Enabled = True
    End Sub

    Private Sub btnA_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Timer1.Enabled = False
    MsgBox (CStr(tempo))
    End Sub

    Private Sub Timer1_Timer()
    tempo = tempo + 1
    Label1.Caption = CStr(tempo)
    End Sub

    P.S. - Passo a VB6 solo temporaneamente perché sono legato all'uso del winsock...

  5. #5
    Perche' la visibilità di una variabile dichiarata con Dim all'interno di un modulo è limitata al modulo stesso. Avresti dovuto dichiararla con:
    codice:
    Public tempo As Integer
    per estenderne la visibilità all'intero progetto.

    Ciauz

    Chico

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Un consiglio per Daniele ... anche se credi di avere compreso appieno l'utilizzo delle variabili (in particolare la visibilita' ...), dai comunque un'occhiata ad un libro di base ...

  7. #7
    Un altro consiglio: per evitare di scivolare su queste banalità di scope delle variabili metti un Option Explicit all'inizio di ogni file (o dì a VB6 di inserirlo automaticamente, andando su Tools->Options->Require Variable Declaration->OK)...
    Amaro C++, il gusto pieno dell'undefined behavior.

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.