Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    55

    [VB5] Gestione Timer Eventi

    Ciao a tutti!

    Ho un problema con la gestione di un Timer;
    Vi descrivo la mia situazione:

    Ho 10 TextBox che hanno un controllo a matrice (Text1(i));
    Ho un bottone Command_1;
    Ho un Timer che inizia a contare nel momento in cui si preme il button;

    Nei dieci TextBox verranno inseriti da tastiera dei valori numerici che indicano il ritardo con cui avverrà la mia funzione. Al Click infatti, il timer
    comincerà a contare e passati tot secondi farà accadere la mia azione specifica; Nei TextBox quindi vengono raccolti i ritardi con cui l'evento si manifesta (se ad esempio i primi due TextBox contengono 5 e 12 significa che l'evento accadrà dopo 5 secondi che ho premuto il bottone e dopo altri 12 secondi dal quinto secondo accadrà di nuovo l'evento...);

    mio codice:

    Dim dato
    Dim scambio

    Private Sub Command1_Change()
    For i = 0 To 9
    dato = Val(Text1(i).Text)
    Next
    End Sub

    Private Sub Command1_Click()
    Timer1.Interval = 100000000
    Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Timer()
    For i = 0 To 9
    If dato > 0 Then

    scambio = Timer + dato

    'mia funzione

    End If
    Next

    End Sub


    sarebbe più corretto sostituire l'if...end con:

    do while dato>0
    'funzione
    loop
    end sub


    mi date una mano per favore?
    Grasias!!

    Mic.

  2. #2
    Guardando il tuo codice non mi torna una cosa.
    A cosa serve il loop nel metodo Command1_change ?

    Visto che dato non e' un array, conterra' sempre il valore di
    dato = Val(Text1(9).Text)
    Lo stesso problema lo hai nel metodo Private Sub Timer1_Timer()

    Correggi il codice e riformula la domanda, che non ho capito molto bene ....

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    55
    Ciao...dunque:

    io inserisco da tastiera un numero in ogni TestBox (in tutto sono 10) e devo fare in modo che la funzione che devo svolgere accada dopo tanti secondi quanti specificati dai miei numeri;

    esempio:

    TestBox1 = 12 sec. (inserisco i numeri da tastiera)
    TestBox2 = 21 sec.
    TestBox3 = 3 sec.
    ...

    schiaccio su "play" (Command_1) e parte il mio contatore, dopo 12 secondi accadrà il mio evento, dopo altri 21 accadrà di nuovo e poi dopo altri tre secondi...e così via...
    praticamente io devo inserire i secondi ogni quanto deve verificarsi il mio evento(che non si verifica se nel campo di testo c'è zero).

    potreste suggerirmi un modo?

    Grazie e Ciao!
    Mic.

  4. #4
    Ciao..innanzitutto una cose: avevi impostato la proprietà Interval del timer a 100.000.000: questi sarebbero 100.000 secondi quindi più di 27 ore..!! A cosa ti serviva?!?!?!?!?!? :master:

    Per quanto riguarda il codice io farei così:
    -crei una matrice di textbox, di nome Text
    codice:
    Dim Cont As Long
    
    Private Sub Form_Load()
    Timer1.Interval = 1000
    Cont = 0
    End Sub
    
    Private Sub Timer1_Timer()
    Cont = Cont + 1
    Select Case Cont
        Case Is = Val(Text(0).Text)
        'evento 1
        Case Is = Val(Text(1).Text) + Cont
        'evento 2
        Case Is = Val(Text(2).Text) + Cont
        'evento 3
        Case Is = Val(Text(3).Text) + Cont
        'evento 4
        Case Is = Val(Text(4).Text) + Cont
        'evento 5
        Case Is = Val(Text(5).Text) + Cont
        'evento 6
        Case Is = Val(Text(6).Text) + Cont
        'evento 7
        Case Is = Val(Text(7).Text) + Cont
        'evento 8
        Case Is = Val(Text(8).Text) + Cont
        'evento 9
        Case Is = Val(Text(9).Text) + Cont
        'evento 10
    End Select
    End Sub
    fammi sapere..

    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    55
    Ciao!
    alla fine ho risolto inn questo modo:

    non ho necessariamente bisogno di un controllo Timer, ma anzi posso risolvere il tutto molto facilmente con una sola routine (il gestore dell'evento click del bottone Play), ovvero:

    Private Sub cmdPlay_Click()
    Dim i As Integer, tmr As Single
    With txtEventi
    For i = .LBound To .UBound
    With .Item(i)
    If .Text <> "0" Then
    tmr = Timer + CInt(.Text)
    While tmr > Timer
    DoEvents
    Wend

    MsgBox "ciao", vbInformation, "Evento: " & i
    End If
    End With
    Next
    End With
    End Sub

    In questo esempio il bottone play è denominato cmdPlay, mentre la matrice delle caselle di testo è txtEventi; la funzione MsgBox viene richiamata al termine di ciascun lasso di tempo (maggiore di zero secondi).

    Ringrazio cmq per i consigli!

    Ciao!

  6. #6
    Se hai risolto, meglio così..

    Ciao

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.