Controles creados dinamicamente, tengo un problema?

Iniciado por TrashAmbishion, 24 Mayo 2012, 23:18 PM

0 Miembros y 1 Visitante están viendo este tema.

TrashAmbishion

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

seba123neo

usa AddHandler para asignarle el evento que quieras al control, por ejemplo para un boton seria asi:

Código (vbnet) [Seleccionar]
AddHandler newButton.Click, AddressOf ButtonClicked

y para usarlo:

Código (vbnet) [Seleccionar]
Private Sub ButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
MsgBox("Hiciste click en: " & sender.name & vbCrLf & " Nombre del boton: " & sender.Text)
End Sub


saludos.

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

$Edu$

Tenes que crear el procedimiento desde antes, con su codigo, por ejemplo:

Código (vbnet) [Seleccionar]

Private Sub BotonesA_Click(ByVal sender As Object, ByVal e As EventArgs)
  'codigo
  ' codigo
End Sub


Y en ese bucle que hiciste pones

Código (vbnet) [Seleccionar]
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

TrashAmbishion

chicos pero como es un array debo de poner el indice o como hago

$Edu$

Probaste como dije yo? seba te dejo un ejemplo lo que pasa, tenes que poner como puse yo.

TrashAmbishion

Muchisimas gracias problema resueltooooooooooo

Aorita pongo otro lio mas jajajajaja

TrashAmbishion

Cita de: TrashAmbishion en 25 Mayo 2012, 00:41 AM
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...

$Edu$

#7
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

TrashAmbishion

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

$Edu$

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 (vbnet) [Seleccionar]

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


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 (vbnet) [Seleccionar]

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


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

Código (vbnet) [Seleccionar]

Private Sub lstadd_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If VerifyItem(sender.SelectedItem) = False Then
            lstprog.Items.Add(sender.SelectedItem)
            GetInformation(sender.SelectedItem)
            Suma()
        End If
End Sub


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..