none
[Ayuda] Mover PictureBox 10 píxeles arriba RRS feed

  • Pregunta

  • Hola amigos.

    Quisiera saber como puedo mover una imagen colocada en el formulario que se mueva 10 pixeles hacia arriba cuando coloque el ratón encima de la imagen y cuando quite el ratón se vuelva otra vez a su sitio. Entre el movimiento, seria posible que lo haga con algun efecto suave mientras se mueve?

    Gracias

    lunes, 8 de agosto de 2016 7:50

Respuestas

  • Puedes utilizar los eventos MouseEnter y MouseLeave para mover el PictureBox.

    Para suavizar el movimiento podrías utilizar un Timer:

        Private _timerMovimiento As Timer
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            _timerMovimiento = New Timer()
            _timerMovimiento.Enabled = False
            _timerMovimiento.Interval = 10
            _timerMovimiento.Tag = PictureBox1.Top
        End Sub
    
        Private Sub Subir(sender As Object, e As EventArgs)
            If PictureBox1.Top > CInt(_timerMovimiento.Tag) -10 Then
                PictureBox1.Top = PictureBox1.Top -1
                PictureBox1.Invalidate()
            Else 
                _timerMovimiento.Enabled = False
            End If
        End Sub
    
        Private Sub Bajar(sender As Object, e As EventArgs)
            If PictureBox1.Top < CInt(_timerMovimiento.Tag) Then
                PictureBox1.Top = PictureBox1.Top + 1
                PictureBox1.Invalidate()
            Else 
                _timerMovimiento.Enabled = False
            End If
        End Sub
    
        Private Sub PictureBox1_MouseEnter(sender As Object, e As EventArgs) Handles PictureBox1.MouseEnter
            RemoveHandler _timerMovimiento.Tick, AddressOf Bajar
            AddHandler _timerMovimiento.Tick, AddressOf Subir
            _timerMovimiento.Enabled = True
        End Sub
    
        Private Sub PictureBox1_MouseLeave(sender As Object, e As EventArgs) Handles PictureBox1.MouseLeave 
            RemoveHandler _timerMovimiento.Tick, AddressOf Subir
            AddHandler _timerMovimiento.Tick, AddressOf Bajar
            _timerMovimiento.Enabled = True
        End Sub

    Los eventos MouseEnter y MouseLeave habilitan el Timer. Los métodos Bajar y Subir mueven el PictureBox un pixel hasta que llega a su posición final.

    Puedes jugar con los valores de Interval y el incremento de pixels para modificar la animación. Seguramente quede mejor con un Interval de 20 y aumentando y disminuyendo el Top de dos en dos pixels.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Propuesto como respuesta Laura CeglzModerator lunes, 8 de agosto de 2016 20:37
    • Marcado como respuesta Symantecc martes, 9 de agosto de 2016 7:18
    lunes, 8 de agosto de 2016 11:19

Todas las respuestas

  • Puedes utilizar los eventos MouseEnter y MouseLeave para mover el PictureBox.

    Para suavizar el movimiento podrías utilizar un Timer:

        Private _timerMovimiento As Timer
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            _timerMovimiento = New Timer()
            _timerMovimiento.Enabled = False
            _timerMovimiento.Interval = 10
            _timerMovimiento.Tag = PictureBox1.Top
        End Sub
    
        Private Sub Subir(sender As Object, e As EventArgs)
            If PictureBox1.Top > CInt(_timerMovimiento.Tag) -10 Then
                PictureBox1.Top = PictureBox1.Top -1
                PictureBox1.Invalidate()
            Else 
                _timerMovimiento.Enabled = False
            End If
        End Sub
    
        Private Sub Bajar(sender As Object, e As EventArgs)
            If PictureBox1.Top < CInt(_timerMovimiento.Tag) Then
                PictureBox1.Top = PictureBox1.Top + 1
                PictureBox1.Invalidate()
            Else 
                _timerMovimiento.Enabled = False
            End If
        End Sub
    
        Private Sub PictureBox1_MouseEnter(sender As Object, e As EventArgs) Handles PictureBox1.MouseEnter
            RemoveHandler _timerMovimiento.Tick, AddressOf Bajar
            AddHandler _timerMovimiento.Tick, AddressOf Subir
            _timerMovimiento.Enabled = True
        End Sub
    
        Private Sub PictureBox1_MouseLeave(sender As Object, e As EventArgs) Handles PictureBox1.MouseLeave 
            RemoveHandler _timerMovimiento.Tick, AddressOf Subir
            AddHandler _timerMovimiento.Tick, AddressOf Bajar
            _timerMovimiento.Enabled = True
        End Sub

    Los eventos MouseEnter y MouseLeave habilitan el Timer. Los métodos Bajar y Subir mueven el PictureBox un pixel hasta que llega a su posición final.

    Puedes jugar con los valores de Interval y el incremento de pixels para modificar la animación. Seguramente quede mejor con un Interval de 20 y aumentando y disminuyendo el Top de dos en dos pixels.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Propuesto como respuesta Laura CeglzModerator lunes, 8 de agosto de 2016 20:37
    • Marcado como respuesta Symantecc martes, 9 de agosto de 2016 7:18
    lunes, 8 de agosto de 2016 11:19
  • Gracias por responder,

    Me sale esta excepcion:

    System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.
       en MyProject1.Frm_Centro.img_User_MouseEnter(Object sender, EventArgs e)
       en System.Windows.Forms.Control.OnMouseEnter(EventArgs e)
       en System.Windows.Forms.Control.WndProc(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    lunes, 8 de agosto de 2016 15:18
  • ¿En qué instrucción exactamente te da el error?

    ¿Es posible que no hayas creado la instancia del Timer? Fíjate que en mi ejemplo lo creo en el evento Load del formulario.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    lunes, 8 de agosto de 2016 15:22