Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: TrashAmbishion en 24 Mayo 2012, 23:18 pm



Título: Controles creados dinamicamente, tengo un problema?
Publicado por: TrashAmbishion en 24 Mayo 2012, 23:18 pm
Dim a(4) As Listbox

'Podes ponerlo en el evento load del Form o en el evento clic de un  botón.

For i As Integer = 0 To a.GetUpperBound(0)

   a(i) = New Listbox

   a(i).Top = 50

   a(i).Left = 20 + i * a(i).Width + 30

   Me.Controls.Add(a(i))

Next


Bueno asi creo los controles, y el problema esta en que necesito agregarle un codigo en el evento doble_click del list como haria... gracias


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: seba123neo en 24 Mayo 2012, 23:59 pm
usa AddHandler para asignarle el evento que quieras al control, por ejemplo para un boton seria asi:

Código
  1. AddHandler newButton.Click, AddressOf ButtonClicked

y para usarlo:

Código
  1. Private Sub ButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
  2. MsgBox(“Hiciste click en: ” & sender.name & vbCrLf & “ Nombre del boton: ” & sender.Text)
  3. End Sub

saludos.



Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: $Edu$ en 25 Mayo 2012, 00:17 am
Tenes que crear el procedimiento desde antes, con su codigo, por ejemplo:

Código
  1. Private Sub BotonesA_Click(ByVal sender As Object, ByVal e As EventArgs)
  2.   'codigo
  3.   ' codigo
  4. End Sub

Y en ese bucle que hiciste pones

Código
  1. AddHandler a(i).Click, AddressOf BotonesA_Click

Algo asi es, tuve que buscar en google, ya que se C# y aca en vb.net es distinto

Ja.. me ganaste de mano seba


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: TrashAmbishion en 25 Mayo 2012, 00:25 am
chicos pero como es un array debo de poner el indice o como hago


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: $Edu$ en 25 Mayo 2012, 00:31 am
Probaste como dije yo? seba te dejo un ejemplo lo que pasa, tenes que poner como puse yo.


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: TrashAmbishion en 25 Mayo 2012, 00:41 am
Muchisimas gracias problema resueltooooooooooo

Aorita pongo otro lio mas jajajajaja


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: TrashAmbishion en 26 Mayo 2012, 15:33 pm
Muchisimas gracias problema resueltooooooooooo

Aorita pongo otro lio mas jajajajaja

Hola chikos nuevamente, les cuento que cuando me sente en la casa con la cabeza fria y me puse a pensar me tropeze con que habia logrado a medias mi proposito, les explico la otra parte que no logro concretar, ya creo los "listbox" dinamicamente y le asigo el metodo correctamente pero veran yo necesito que cuando pinche en en uno de los item de cualquiera de los listbox me seleccione el mismo indice de otro listbox y que cuando de dobleclick me añada el contenido de ese item a otro listbox que tengo...

este era el codigo que tenia antes

    Private Sub lst12_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        'Verifico si ya esta en la lista
        If VerifyItem(lst12.SelectedItem) = False Then
            'El primero de la lista
            lst1.Items.Add(lst12.SelectedItem)
            GetInformation(lst12.SelectedItem)
            Suma()
        End If
    End Sub

    Private Sub lst12_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        lst11.SetSelected(lst12.SelectedIndex, True)
    End Sub

Lo que esta en negrita es una funcion que hice para saber si en el listbox al que se añadira el contenido cuando se de dobleclick ya existe uno con el mismo texto...

si pudiera usar alguna funcion nata del vb.net para quitar la chapuza de mi funcion jajaja se los agradeceria

Salu2 y gracias cualquier ayuda...


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: $Edu$ en 26 Mayo 2012, 17:39 pm
La verdad que no te entiendo bien, tienes que explicarte bien que es lo que hace tu programa, esque hablas de listbox y listbox y mas listbox, que me pierdo en si son los mismos del array de listbox que creaste o tienes otro a parte, porque por ejemplo veo que esos metodos que pusiste son de un lst12 que me suena a que es un listbox fuera de el array que creaste.

Lo que te puedo decir por si por ahi le entendi.. es que hagas un simple for recorriendo el array de listbox y poniendole listbox(i).SetSelected(lst12.SelectedIndex, True)  ' esto te lo copie a vos, ni idea si es asi, pero lo que digo es hacer que se seleccione el mismo Index (item..) en cada listbox del array de listbox.

Despues lo de añadir a otro listbox que tenes, no se bien a que te referis, ya que tu evento de lst12_MouseDoubleClick() parece que esta bien segun lo que queres.


pd: Para lo de verificar si un item ya existe, creo que existe una funcion ya para eso si, solo buscala en google o anda viendo los metodos del listbox, que por ahi encontraras una que sea para eso, es cuestion de leer xD


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: TrashAmbishion en 26 Mayo 2012, 18:09 pm
Me imagine que iba a pasar por eso expongo el problema con mas claridad...

Este es el codigo que tengo hasta ahora...

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim lstname(5) As ListBox
    Dim lsttime(5) As ListBox

        'Podes ponerlo en el evento load del Form o en el evento clic de un  botón.

        For i As Integer = 0 To lstname.GetUpperBound(0)

            lstname(i) = New ListBox
            lsttime(i) = New ListBox

            lstname(i).Top = 20
            lstname(i).Left = 5
            lstname(i).Width = 440
            lstname(i).Height = 147

            lsttime(i).Top = 20
            lsttime(i).Left = 450
            lsttime(i).Width = 98
            lsttime(i).Height = 147

            Me.tc1.TabPages(i).Controls.Add(lstname(i))
            Me.tc1.TabPages(i).Controls.Add(lsttime(i))

            AddHandler lstname(i).MouseDoubleClick, AddressOf lstadd_MouseDoubleClick
            AddHandler lstname(i).SelectedIndexChanged, AddressOf lstadd_MouseDoubleClick

        Next

End Sub

Lo que ando tratando de hacer es que cuando pinche en un de los listbox que pertenece a lstname me seleccione el mismo indice en el listbox de lsttime, como puedes ver son la misma cantidad de listbox asi que no debe ser muy complejo...

y lo del doble-click es que cuando lo haga sobre un item de cualquiera de los listbox que pertenezca a lstname este me verifique si ya existe en un listbox que se llama lstprog y si no esta lo añada... espero me entiedas mejor... gracias cualquier ayuda o comentario...

Salu2


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: $Edu$ en 26 Mayo 2012, 19:33 pm
Trata de poner los codigos dentro de las etiquetas de codigo, asi se lee mejor.
Pero lo explicaste bien ahora si, y creo que te has confundido en esta parte:

Código
  1. AddHandler lstname(i).MouseDoubleClick, AddressOf lstadd_MouseDoubleClick
  2. AddHandler lstname(i).SelectedIndexChanged, AddressOf lstadd_MouseDoubleClick
  3.  

Ya que estas haciendo que haga lo mismo cuando se da doble click y cuando la seleccion del item cambia, ya que le pones el mismo procedimiento a esos 2 eventos distintos. El procedimiento que pusiste es el lstadd_MouseDoubleClick.

Asi que para empezar, cambialo por esto:


Código
  1. AddHandler lstname(i).MouseDoubleClick, AddressOf lstadd_MouseDoubleClick
  2. AddHandler lstname(i).SelectedIndexChanged, AddressOf SeleccionarMismoIndex
  3.  

Entonces ahora si.. los eventos estan creados, solo te queda crear esos procedimientos: lstadd_MouseDoubleClick() y SeleccionarMismoIndex().

Código
  1. Private Sub lstadd_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
  2. If VerifyItem(sender.SelectedItem) = False Then
  3.            lstprog.Items.Add(sender.SelectedItem)
  4.            GetInformation(sender.SelectedItem)
  5.            Suma()
  6.        End If
  7. End Sub
  8.  

Asi lo tenias vs, no se que hacen el GetInformation() ni el Suma(), pero eso sabras vs, despues.. sobre el VerifyItem, esa funcion la haces vs, es hacerque te devuelva True si existe y sino existe entonces devuelve False. Ya te dije que creo que ya existe una funcion en el listbox para verificar si un elemento existe o no, cosa que tendrias que hacer por ejemplo:
 if lstprog.Item.Contains(sender.SelectedItem) = False then
   ...

y no necesitarias de crear la funcion VerifyItem que recorra todos los items verificando si se encuentra o no.

Podrias hacer eso por mientras, ya que lo otro no se bien como lo quieres hacer, porque tienes 6 lstname (o 5 no se como es vb.net con lo del tamaño de arrays) y no se si quieres que al seleccionar un item en el lstname(3) por ejemplo, se seleccione en TODOS los otros lsttime el mismo item, o solo en el lsttime(3).

Pero vamos, que estas cosas tan buenas para pensarlas con papel y lapicera y cuando lo logras hacer te sientes bien de bien jeje. Pero me dices..


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: TrashAmbishion en 26 Mayo 2012, 19:43 pm
Muchisimas gracias por darme la idea era tan obvia recorriendo los lst era la solucion en cada evento y dentro de esos for agregar el codigo en cuestion, ahora mismo veo lo otro que me dijistes para quitar la funcion VerifyItem

gracias y te mantento al tanto...

Código
  1.  
  2. Private Sub lstadd_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
  3.  
  4. 'el tc1 es un tabcontrol, tc1.SelectedIndex con esto obtengo el pag actual que es tiene el mismo indice que el
  5. 'del listbox....
  6.  
  7. If VerifyItem(lstname(tc1.SelectedIndex).SelectedItem.ToString) = False Then
  8. lst1.Items.Add(lstname(tc1.SelectedIndex).SelectedItem)
  9. GetInformation(lstname(tc1.SelectedIndex).SelectedItem)
  10. Suma()
  11. End If
  12.  
  13. End Sub
  14.  
  15. Private Sub lstselect_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
  16.  
  17. If lstname(tc1.SelectedIndex).SelectedIndex <> -1 Then
  18. lsttime(tc1.SelectedIndex).SetSelected(lstname(tc1.SelectedIndex).SelectedIndex, True)
  19. End If
  20. Next
  21.  
  22. End Sub
  23.  


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: $Edu$ en 26 Mayo 2012, 20:00 pm
No me quedo claro si lo solucionaste entonces ya o no, pero acordate de poner los codigos dentro de las etiquetas de codigo:


[ code=vbnet]
' codigo
' codigo
[ /code]

Sin los espacios.. para que funcione


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: TrashAmbishion en 26 Mayo 2012, 20:04 pm
No me quedo claro si lo solucionaste entonces ya o no, pero acordate de poner los codigos dentro de las etiquetas de codigo:


[ code=vbnet]
' codigo
' codigo
[ /code]

Sin los espacios.. para que funcione

ah vale lo hare para la proxima, gracias man, publique un nuevo problema, si no estas muy ostinado de mi echame una ayudita, necesito enviar a un php unos datos por POST... si tienes algun ejemplo por ahi tirado, hazmelo llegar


Título: Re: Controles creados dinamicamente, tengo un problema?
Publicado por: $Edu$ en 26 Mayo 2012, 20:07 pm
Ya lo vi, pero no puedo ayudarte en eso, no veo el error y nunca trabaje con eso, pero no sigas aca, ya no contestes que nos desviamos de tema. Saludos! y modifica el otro mensaje poniendo el codigo con color! Nos vemos