none
¿Como Controlar el intervalo de un Timer , usando un TrackBar ?

    Pregunta

  • Hola buen día a todos   , bueno  mi pregunta es  como hago para que con un control TrackBar   pueda controlar el intervalo de un Timer
    • Editado HeberDany viernes, 19 de agosto de 2016 0:07
    viernes, 19 de agosto de 2016 0:04

Respuestas

  • HeberDany,

    Dado que el valor 0 detiene el temporizador podemos aprovechar la propiedad Enabled para interpolar entre 0 y 1. Considera que invocar al método Start() es lo mismo que establecer la propiedad Enabled a True, y  establecer la propiedad Enabled a False es lo mismo que invocar al método Stop().

    Private Sub trackBar1_Scroll(sender As Object, e As EventArgs)
    	timer1.Enabled = trackBar1.Value > 0
    
    	If timer1.Enabled Then
    		timer1.Interval = (trackBar1.Value * 1000)
    	End If
    End Sub

    En el evento Load quedará configurar las propiedades básicas del control TrackBar, sin iniciar el temporizador.

    trackBar1.Minimum = 0
    trackBar1.Maximum = 10
    trackBar1.LargeChange = 1
    trackBar1.SmallChange = 1
    trackBar1.TickFrequency = 1
    
    trackBar1.Value = 0
    


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 20 de agosto de 2016 0:42
  • Hola HeberDany,

    No basta sólo con asignar el valor del TrackBar a la propiedad Interval del Timer?

    Algo así :

      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            TrackBar1.Minimum = 1000  '1seg
            TrackBar1.Maximum = 60000   '60seg = 1 minuto
    
            TrackBar1.LargeChange = 1000
            TrackBar1.SmallChange = 1000
            TrackBar1.TickFrequency = 1000
    
            Timer1.Interval = TrackBar1.Minimum
            Timer1.Start()
        End Sub

    Y cuando se ejecute el evento Scroll del TrackBar, actualizar el intervalo :

     Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
            Dim intervalo As Integer = CType(sender, TrackBar).Value
            Timer1.Interval = intervalo
        End Sub

    Prueba y comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 19 de agosto de 2016 1:04

Todas las respuestas

  • Hola HeberDany,

    No basta sólo con asignar el valor del TrackBar a la propiedad Interval del Timer?

    Algo así :

      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            TrackBar1.Minimum = 1000  '1seg
            TrackBar1.Maximum = 60000   '60seg = 1 minuto
    
            TrackBar1.LargeChange = 1000
            TrackBar1.SmallChange = 1000
            TrackBar1.TickFrequency = 1000
    
            Timer1.Interval = TrackBar1.Minimum
            Timer1.Start()
        End Sub

    Y cuando se ejecute el evento Scroll del TrackBar, actualizar el intervalo :

     Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
            Dim intervalo As Integer = CType(sender, TrackBar).Value
            Timer1.Interval = intervalo
        End Sub

    Prueba y comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 19 de agosto de 2016 1:04
  • Hola buen día  , bueno ya avía hecho un  pregunta igual a este pero el problema es que no  lo explique claro y preciso  

    Bueno yo estoy en un proyecto en donde   use un Timer y un TrackBar  , el TrackBar es asi

    Lo que quiero es que Cada ves que el usuario elija  un valor   Del 0 al 10 , El intervalo  del Timer Cambie

     

    por ejemplo si escojo 1 segundo que el intervalo del Timer  sea 1000  y así Sucesivamen con todos los numeros

    Gracias De ante mano


    viernes, 19 de agosto de 2016 23:46
  • Hola HeberDany,

    Tu valor mínimo debería ser 1 = 1000 = 1seg, si pones 0 te mostrará un error :

    El valor '0' no es un valor válido para 'Interval'

    Por consiguiente sería algo como esto :

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            TrackBar1.Minimum = 1
            TrackBar1.Maximum = 10
    
            TrackBar1.LargeChange = 1
            TrackBar1.SmallChange = 1
            TrackBar1.TickFrequency = 1
    
            'Al carga se establece el intervalo con 1seg
            Timer1.Interval = TrackBar1.Minimum
            Timer1.Start()
        End Sub

    Y cuando el usuario hace scroll en el TrackBar.

       Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
            Timer1.Interval = CType(sender, TrackBar).Value * 1000
        End Sub

    Sólo multiplicar el número por el 1000.

    1 * 1000 = 1000 = 1seg
    2 * 1000 = 2000 = 2seg
    3 * 1000 = 3000 = 3seg
    ....

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 19 de agosto de 2016 23:55
  • Hola HeberDany,

    Disculpa por duplicar otra respuesta.

    Como sabes el valor 0 no proporciona valor al intervalo, por lo que si optas por tener si o sí en tu TrackBar, puedes hacer una validación antes de asignar el intervalo.

       Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            TrackBar1.Minimum = 0
            TrackBar1.Maximum = 10
    
            TrackBar1.LargeChange = 1
            TrackBar1.SmallChange = 1
            TrackBar1.TickFrequency = 1
    
            'Al carga se establece el intervalo con 1seg
            Timer1.Interval = TrackBar1.Minimum + 1
            Timer1.Start()
        End Sub

    En caso el usuario, arrástre al 0 :

     Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
            'Si el valor del TB es 0, detenemos el Timer
            If CType(sender, TrackBar).Value = 0 Then
                Timer1.Stop()
            Else
                'Es un valor mayor a 0, iniciamos el timer con el intervalo
                Timer1.Start()
                Timer1.Interval = CType(sender, TrackBar).Value * 1000
            End If
        End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Propuesto como respuesta Willams Morales sábado, 20 de agosto de 2016 0:43
    sábado, 20 de agosto de 2016 0:06
  • HeberDany,

    Dado que el valor 0 detiene el temporizador podemos aprovechar la propiedad Enabled para interpolar entre 0 y 1. Considera que invocar al método Start() es lo mismo que establecer la propiedad Enabled a True, y  establecer la propiedad Enabled a False es lo mismo que invocar al método Stop().

    Private Sub trackBar1_Scroll(sender As Object, e As EventArgs)
    	timer1.Enabled = trackBar1.Value > 0
    
    	If timer1.Enabled Then
    		timer1.Interval = (trackBar1.Value * 1000)
    	End If
    End Sub

    En el evento Load quedará configurar las propiedades básicas del control TrackBar, sin iniciar el temporizador.

    trackBar1.Minimum = 0
    trackBar1.Maximum = 10
    trackBar1.LargeChange = 1
    trackBar1.SmallChange = 1
    trackBar1.TickFrequency = 1
    
    trackBar1.Value = 0
    


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 20 de agosto de 2016 0:42