none
Como puedo hacer un carousel con dos paneles especificos RRS feed

  • Pregunta

  • Hola amigos,

    Tengo dos paneles en mi formulario llamados panel1 y panel2, donde quiero que al pinchar el boton izquierdo me lleve hasta x posicion con efecto el panel 2, y viceversa con el boton derecho volver al panel 1 y dejandolo en x posicion.

    ¿Como podria hacerlo? Me pueden ayudar?

    Gracias

    • Cambiado Enrique M. Montejo martes, 12 de julio de 2016 7:29 Pregunta relacionada con controles de Windows Forms.
    martes, 28 de junio de 2016 16:38

Todas las respuestas

  • Hola Symantecc,

    para lograr hacer lo que mencionas de manera fácil, puedes usar controles externos a windows (Telerik, devexpress, etc), pero con los mismos controles de windows también lo podrías conseguir, te dejo un ejemplo:

    Carrusel con Windows Forms

    Espero te ayude


    Javier

    • Propuesto como respuesta José De Alva viernes, 1 de julio de 2016 14:37
    martes, 28 de junio de 2016 16:57
  • Symantecc,

    Lo primero que puedo sugerirte es que contengas ambos objetos de tipo Panel dentro un objeto del mismo tipo (Panel), el objetivo es que con el desplazamiento se enmascaren según la parte visible del contenedor. Lo segundo es que no pongas muchas esperanzas en efectos asombros en un desarrollo WinForm.

    Dado que los botones btnDerecha y btnIzquierda realizan la misma acción (desplazamiento) entonces te recomiendo conectar los eventos Click de ambos objetos a uno sólo, algo como:

    Private Sub Form1_Load(sender As Object, e As EventArgs)
    	btnDerecha.Click += New System.EventHandler(Me.MoverPanel)
    	btnIzquierda.Click += New System.EventHandler(Me.MoverPanel)
    End Sub

    Lo que hago es vincular los eventos Click a un sólo controlador de eventos: MoverPanel. El evento de vento MoverPanel() realizará el desplazamiento de los objetos de tipo Panel según el botón pulsado.

    Private Sub MoverPanel(sender As Object, e As EventArgs)
    	Dim btn As Button = DirectCast(sender, Button)
    
    	Dim distanciaDesplazamiento As Integer = 100 * (If(btn.Name = "btnDerecha", 1, -1))
    
    	panel1.Location = New Point(panel1.Location.X + distanciaDesplazamiento, panel1.Location.Y)
    	panel2.Location = New Point(panel2.Location.X + distanciaDesplazamiento, panel2.Location.Y)
    End Sub

    martes, 28 de junio de 2016 18:20
  • Hola gracias por responder.

    Me salen dos problemas.

    1) Public Event Click As EventHandler' es un evento y no se puede llamar directamente. Use una instrucción 'RaiseEvent' para generar un evento

    y

    2) 

    El delegado 'EventHandler' requiere una expresión 'AddressOf' o una expresión lambda como único argumento de su constructor.

    En negrita te marco lo que me sale el error        

    btnIzquierda.Click += New EventHandler(Me.MoverPanel)


    • Editado Symantecc miércoles, 29 de junio de 2016 16:34
    miércoles, 29 de junio de 2016 16:34
  • Symantecc,

    Lo siento, cambia por favor las instrucciones del evento Load por lo siguiente:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            AddHandler btnDerecha.Click, AddressOf MoverPanel
            AddHandler btnIzquierda.Click, AddressOf MoverPanel
    
        End Sub

    • Marcado como respuesta José De Alva viernes, 1 de julio de 2016 14:37
    • Desmarcado como respuesta Symantecc miércoles, 6 de julio de 2016 6:04
    miércoles, 29 de junio de 2016 16:40
  • Me sigue apareciendo el mismo error
    miércoles, 29 de junio de 2016 19:10
  • Symantecc,

    Si hiciste el cambio sugerido no veo porque sigues obteniendo la misma excepción. ¿Podrías mostrar el código que tienes hasta el momento? De ser posible, ¿puedes adjuntar un screeenshoot del error que obtienes?

    miércoles, 29 de junio de 2016 20:29
  • Gracias por responder, cuando pulso un botón me sale una excepción:



    Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración 
    Just-In-Time (JIT) en lugar de a este cuadro de diálogo.

    ************** Texto de la excepción **************
    System.InvalidCastException: No se puede convertir un objeto de tipo 'Facturacion360.One_Button' al tipo 'System.Windows.Forms.Button'.
       en System.EventHandler.Invoke(Object sender, EventArgs e)
       en System.Windows.Forms.Control.OnClick(EventArgs e)
       en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       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)


    jueves, 30 de junio de 2016 6:51