none
Mover botones en tiempo de ejecucion RRS feed

  • Pregunta

  • hola amigos aqui con un nuevo problema por solucionar y nuevamente pues no se como hacerlo.

    Me dieron un examen el cual es diseñar formularios como el qe diseñamos en windows Form con botones etiquiteas y demas controles basicos, los controles se crean en tiempo de ejecucion.

    tengo una lista para cada tipo de control es decir una lista de botones otra de text , etc

    ahora mi problema es el siguiente como puedo hacer para mover los controles es decir al dar click en el boton2 como saco la informacion del boton y como puedo mover

    tengo qe mover los controles pero como se cual es el control qe estoy clikeando

    espero qe puedan ayudarme estare pendiente de su ayuda gracias de antemano y saludos

    viernes, 6 de mayo de 2011 21:56

Respuestas

  • Hola.

    Puedes Hacer lo Siguiente:

    Public _x, _y As Integer
      Public Movimiento As Boolean
    
    
      Private Sub Control_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        _x = e.X
        _y = e.Y
        If e.Button = MouseButtons.Left Then
          Movimiento = True
        End If
      End Sub
    
      Private Sub Control_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Movimiento Then
          CType(sender, Control).Left = e.X +
            CType(sender, Control).Left - _x
          CType(sender, Control).Top = e.Y +
            CType(sender, Control).Top - _y
        End If
      End Sub
    
      Private Sub Control_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Movimiento = False
      End Sub
    
      Public Sub AsignarEventos(ByVal _Controles As Control)
    
        Dim Controles As Control
    
        For Each Controles In _Controles.Controls
    
          AddHandler Controles.MouseDown, AddressOf Control_MouseDown
          AddHandler Controles.MouseMove, AddressOf Control_MouseMove
          AddHandler Controles.MouseUp, AddressOf Control_MouseUp
    
          AsignarEventos(Controles)
        Next
      End Sub
    
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AsignarEventos(Me)
      End Sub
    

    Solo que los controles los no los agrego en tiempo de ejecución, pero agarra una idea de como se hace.

    Saludos.


    Estudiante de Sistemas Informáticos.
    • Marcado como respuesta David21522161 sábado, 7 de mayo de 2011 17:08
    sábado, 7 de mayo de 2011 2:48

Todas las respuestas

  • Lo que entiendo es que ya agregaste los controles al formulario y lo que deseas es mover los libremente en el formulario con el mouse?

    viernes, 6 de mayo de 2011 22:25
  • si lo que quieres es mover el control al hacerle clic, podes usar el evento mousedown, la propiedad que establece la posicion del control es location,

    control.location = new point(x,y)

    en el mousedown, cambias la ubicacion del control mendiante la propiedad location, obtiene la posicion del mouse en el form, para ello tendras que googlear un poco

    Saludos Maximiliano Ferrari, Uruguay
    viernes, 6 de mayo de 2011 22:50
  • gracias por sus respuestas pero los controles yo los creo en tiempo de ejecucion y los adiciono al formulario

    ahora lo qe necesito saber es en el evento del mousse el down o el move como obtengo la informacion del control qe quiero mover

    Ejemplo agrege 10 botones y quiero mover el boton 5

    public mousse_move()

       como se qe control he seleccionado

      boton5.location = new point(x,y)

    end

    lo qe nose es qe vairable o como obtener el control qe he seleccionado con el mousse

    espero puedan ayudarme y gracias por sus ayuda

    viernes, 6 de mayo de 2011 22:58
  • Hola.

    Puedes Hacer lo Siguiente:

    Public _x, _y As Integer
      Public Movimiento As Boolean
    
    
      Private Sub Control_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        _x = e.X
        _y = e.Y
        If e.Button = MouseButtons.Left Then
          Movimiento = True
        End If
      End Sub
    
      Private Sub Control_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Movimiento Then
          CType(sender, Control).Left = e.X +
            CType(sender, Control).Left - _x
          CType(sender, Control).Top = e.Y +
            CType(sender, Control).Top - _y
        End If
      End Sub
    
      Private Sub Control_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Movimiento = False
      End Sub
    
      Public Sub AsignarEventos(ByVal _Controles As Control)
    
        Dim Controles As Control
    
        For Each Controles In _Controles.Controls
    
          AddHandler Controles.MouseDown, AddressOf Control_MouseDown
          AddHandler Controles.MouseMove, AddressOf Control_MouseMove
          AddHandler Controles.MouseUp, AddressOf Control_MouseUp
    
          AsignarEventos(Controles)
        Next
      End Sub
    
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AsignarEventos(Me)
      End Sub
    

    Solo que los controles los no los agrego en tiempo de ejecución, pero agarra una idea de como se hace.

    Saludos.


    Estudiante de Sistemas Informáticos.
    • Marcado como respuesta David21522161 sábado, 7 de mayo de 2011 17:08
    sábado, 7 de mayo de 2011 2:48
  • Muchas gracias Pedro por tu ejemplo me ha sido de muhca ayuda

    de nuevo muchisimas gracias

    sábado, 7 de mayo de 2011 17:08
  • Hola P. Mata:

    Esta bueno tu codigo y puedo hacer para especificar solo querio mover unos 4 label.

    El codigo que muestras mueve todo solo quiero que el resto este quieto y solo mover los label tienes algun ejemplo?

    martes, 7 de marzo de 2017 20:32