none
copiar contenido de un Panel dentro de FlowLayoutPanel RRS feed

  • Pregunta

  • Buenos dias,

    He estado buscando la menera de copiar el contenido de un panel (botones, textbox, labels...) a un FlowLayoutPanel para poder tener varios de estos objetos todos bien ordenados. Lo que he encontrado es poder moverlos pero no copiarlos.

    Si fuerais tan amables de ayudarme os lo agradeceria.

    Muchas gracias de antemano y un saludo.

    • Cambiado Enrique M. Montejo jueves, 13 de septiembre de 2012 6:51 Controles de Windows Forms (De:Lenguaje VB.NET)
    viernes, 17 de agosto de 2012 9:01

Todas las respuestas

  • Buenos dias,

    Lo que yo utilizo es esto:

    FORM1    

    Public Class Form1
        Friend Shared m_ty As Type
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
            For Each ctrl As Control In GroupBox1.Controls
                AddHandler ctrl.MouseMove, AddressOf ControlOnMouseDown
            Next
            Dim frm As New Form2()
            frm.StartPosition = FormStartPosition.Manual
            frm.Location = New Point(Me.Location.X + Width, Me.Top)
    
        End Sub
    
        Friend Shared Sub ControlOnMouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
            Dim ctrl As Control = DirectCast(sender, Control)
            m_ty = ctrl.GetType
            Form1.DoDragDrop(ctrl, DragDropEffects.Copy Or DragDropEffects.Move)
        End Sub
    
    End Class


    y en el FORM 2 

    Public Class Form2
        Private Sub Form2_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
            FlowLayoutPanel1.AllowDrop = True
            AddHandler FlowLayoutPanel1.DragDrop, AddressOf GroupBoxOnDragDrop2
        End Sub
        Private Sub FlowLayoutPanel1_DragEnter(ByVal sender As Object, ByVal e2 As DragEventArgs) Handles FlowLayoutPanel1.DragEnter
            e2.Effect = DragDropEffects.Copy Or DragDropEffects.Move
        End Sub
        Private Sub GroupBoxOnDragDrop2(ByVal sender As Object, ByVal e2 As DragEventArgs)
            Dim ctrl2 As Control = TryCast(e2.Data.GetData(Form1.m_ty), Control)
            FlowLayoutPanel1.Controls.Add(ctrl2)
            Dim pt2 As Point = FlowLayoutPanel1.PointToClient(New Point(e2.X, e2.Y))
            ctrl2.SetBounds(pt2.X, pt2.Y, ctrl2.Width, ctrl2.Height)
            Form1.GroupBox1.Controls.Remove(ctrl2)
            RemoveHandler ctrl2.MouseMove, AddressOf Form1.ControlOnMouseDown
        End Sub
    End Class

    Lo que hace este codigo es mover lo que hay en un groupbox del Form1 a un FlowLayoutPanel  del Form2 y si abro varias veces el Form1 puedo mover lo que hay dentro del Groupbox tantas veces como necesite

    Lo creo SoftJaen en el Post http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/1c80101c-72d8-40d2-9139-a4ccddc2afba/#5d1d67cf-1b75-4327-a98f-0d732f35c2af 

    Pero me dijo que si tenia mas dudas abriera otra conversacion, asi que por esto he abierto este post.

    Lo que pasa es que me ha surgido una duda nueva.

    Estoy traspasando entre otras cosas un label que proporciona un numero y que posteriormente dandole a un boton tiene que ordenarse en un listbox y lo que necesito es que todas las copias que yo haga al darle yo al boton de ordenar los digitos del label de todas las copias se ordenen en el Listbox, lo que pasa es que solo se me ordena una.

    El codigo que utilizo para ordenar es

     Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            Dim arr() As String
            Dim nombres As String
            ReDim arr(0)
    
            arr(0) = Label8.Text
            ListBox1.Items.Clear()
            Array.Sort(arr) ' esto ordena el array alfabeticamente
            Array.Reverse(arr)
            ListBox1.Items.Clear()
            For Each nombres In arr
    
                ListBox1.Items.Add(nombres)
            Next
    
        End Sub

    Este codigo junto con el listboxx y el Button4 los traspaso con la formula de arriba. 

    Sabeis si lo que estoy pidiendo es imposible y por lo tanto una locura mia o de alguna manera se puede hacer??

    Muchas gracias de antemano y un saludo.


    • Editado Darkchop viernes, 17 de agosto de 2012 10:19 Edicion
    viernes, 17 de agosto de 2012 10:14
  • jejeje sospechaba que no me habia explicado bien.



    haber el en form1 tengo un panel varios obejtos entre los que tiene un label y un boton que al apretarlo hace que el label aparezca aleatoriamente un numero entre el 1 y el 20.

    Entonces lo que yo hago es pasar el Panel al form2 dentro de FlowLayoutPanel y cuando esta aqui le doy al boton y me genera el numero aleatorio.

    Entonces lo que yo quiero es que estos Labels se ordenen en un Listbox por orden ascendente desde un boton. El problema es que esta formula no la puedo poner en el Form2 porque alli no estan los labels en verdad y por lo tanto tengo que poner el listbox con el boton de ordenar en el Form1 y traspasarlo al form2 junto con los panels.

    Espero haberme explicado un poco mejor

    Muchas gracias de antemano y un saludo.
    viernes, 17 de agosto de 2012 11:14