Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Saber la cantidad de pic box generados en base al index y obtener el valor

Estas en el tema de Saber la cantidad de pic box generados en base al index y obtener el valor en el foro de Visual Basic clásico en Foros del Web. Buenas a toda la comunidad, tengo el siguiente detalle yo genero dinamicamente unos picturebox llamado botonprods, esto se genera desde una tabla de access. les ...
  #1 (permalink)  
Antiguo 16/01/2013, 12:08
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 14 años, 1 mes
Puntos: 2
Exclamación Saber la cantidad de pic box generados en base al index y obtener el valor

Buenas a toda la comunidad, tengo el siguiente detalle yo genero dinamicamente unos picturebox llamado botonprods, esto se genera desde una tabla de access.

les dejo la parte del código que me da problema y les explico lo que quiero hacer:

Código:
    Dim nProds As Integer
    
    For i = 0 To ind - 1
    Next i
    
    nProds = botonprods(i).index / 4
Como pueden ven lo que estoy intentando hacer es en base a la cantidad de botonprods que tengo llámese 14 y lo dividimos por 4.

En este paso tengo 2 detalles uno es que el valo de nProds es 0 y el otro es que si llegase a funcionar y a 14 lo divido por 4, me daría un resultado de 3.5 y lo que yo necesito es que el resultado siempre lo redondee hacia arriba, en este caso 4.
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #2 (permalink)  
Antiguo 16/01/2013, 13:37
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

Una posible solucion sería esta:

Código vb:
Ver original
  1. nProds = botonprods(i).index \ 4  '\ Devuelve el entero aunque en este caso
  2. nProds = botonprods(i).index / 4  '/ Tambien lo hara porque nProds es Integer
  3. If botonprods(i).index Mod 4 > 0 Then nProds = nProds + 1
Lo que obviamente hacemos es que si la división tiene resto sumamos uno al valor previamente obtenido

Por si no lo has tenido en cuenta ten presente que:

For i = 0 To 8
Next i

Al llegar a este punto i = 9 lo comentos por si debes actuar en consecuencia.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 16/01/2013, 14:28
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

Una duda: ¿botonprods(i).index no es siempre igual a i?

Dim nProds As Integer
For nProds = botonprods.LBound To botonprods.UBound
Debug.Print "Valor nProds= " & CStr(nProds) & " Valor Index= " & CStr(botonprods(nProds).Index)
Next nProds


Devuelve:
Valor nProds= 0 Valor Index= 0
Valor nProds= 1 Valor Index= 1
Valor nProds= 2 Valor Index= 2
Valor nProds= 3 Valor Index= 3


No entiendo que es lo que necesitas exactamente...

Saludos.
  #4 (permalink)  
Antiguo 16/01/2013, 14:45
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 14 años, 1 mes
Puntos: 2
De acuerdo Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

Erbuson gracias por tu respuesta despues de relajarme un rato y descanzar la cabeza ya lo solucione, de la siguiente manera:

Código:
    For i = 0 To ind - 1
    Next i
    
    indice = botonprods.Count
    
    nProds = indice / 4
indice es un integer.

Saludos y gracias
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #5 (permalink)  
Antiguo 16/01/2013, 15:18
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 14 años, 1 mes
Puntos: 2
Exclamación Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

Cita:
Iniciado por ComprasDesdeCasa Ver Mensaje

No entiendo que es lo que necesitas exactamente...

Saludos.
Lo que intento haces es lo siguiente:

tengo 2 picturebox uno grande llamado areaprods y dentro de este uno pequeño con index 0 llamado botonprods.

este ultimo lo uso para generar un control dinámico en tiempo de ejecución, básicamente genero tantos como datos tengo en una tabla de mi db. Ademas de que tengo un control de columnas para que cada 4 botonprods me haga un enter por asi decirlo y siga agregando debajo.

Como mi picturebox areaprods esta limitado por tamaño a solo mostrar 4 columnas y 3 filas solo puedo mostrar hasta 12 elementos, los demás los sigue agregando debajo pero no se ven.

por este motivo quería poner un scrollbar vertical para poder desplazarme, les dejo el código de mi scrollbar:

Código:
Private Sub VScrollProd_Change()

Call VerticalScroll

End Sub

Private Sub VScrollProd_Scroll()

Call VerticalScroll

End Sub

Private Sub VerticalScroll()
  
    Dim l As Double
    Dim a As Double
    Dim x As Double
    Dim AltoBt As Integer
    Dim nProds As Integer
    Dim AltoTotBt As Integer
    Dim indice As Integer
    
    For i = 0 To ind - 1
    Next i
    
    indice = botonprods.Count
    
    nProds = indice / 4
    AltoBt = botonprods(i).Height + 49
    AltoTotBt = AltoBt * nProds

    x = VScrollProd.Value
    a = AltoTotBt - areaprods.Height
    l = (a * x) / 100
    botonprods(i).Top = -1

End Sub
por algun motivo no me funciona mi scroll pero tampoco obtengo error.
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #6 (permalink)  
Antiguo 20/01/2013, 10:35
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

De qué sirve este for?
For i = 0 To ind - 1
Next i

si no hay nada entre el for y el next, es sólo para perder tiempo. Es así?

Saludos
  #7 (permalink)  
Antiguo 21/01/2013, 09:37
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

Cita:
Iniciado por ComprasDesdeCasa Ver Mensaje
De qué sirve este for?
For i = 0 To ind - 1
Next i

si no hay nada entre el for y el next, es sólo para perder tiempo. Es así?

Saludos
compras, ese for lo tengo porque como mis picturebox se generan dinamicamente según la cantidad de registros de una tabla en la sentencia

AltoBt = botonprods(i).Height + 49

obtengo un error de que el control array 14 no existe, esto es porque por ejemplo en mi tabla tengo 13 registros
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #8 (permalink)  
Antiguo 21/01/2013, 15:06
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

Cosas que veo. Espero que lo entiendas como crítica constructiva

1. El for no sirve de gran cosa... de hecho sólo lo quieres para que i=ind-1, cosa que podrías indicar directamente. También podrías utilizar la propiedad ubound (mira mi mensaje #3) para obtener el valor.
2. No sé por qué te has fijado en obtener el valor del último botonprods que has utilizado. También podrías utilizar la del primero (i=0) y sería lo mismo.
3. Me imagino que VScrollProd es un control de tipo VScroll. Si te fijas tiene una propiedad Max. Yo le asignaría algún múltiplo de filas de controles botonprods que llevas y de la altura de los mismos, teniendo en cuenta ese 49 que supongo que es la distancia entre VScrollProd. De ese modo te será más fácil controlar en qué fila estás cuando encuentres el valor actual VScrollProd.Value.

Saludos.
  #9 (permalink)  
Antiguo 21/01/2013, 19:51
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

Cita:
Iniciado por ComprasDesdeCasa Ver Mensaje
Cosas que veo. Espero que lo entiendas como crítica constructiva

1. El for no sirve de gran cosa... de hecho sólo lo quieres para que i=ind-1, cosa que podrías indicar directamente. También podrías utilizar la propiedad ubound (mira mi mensaje #3) para obtener el valor.
2. No sé por qué te has fijado en obtener el valor del último botonprods que has utilizado. También podrías utilizar la del primero (i=0) y sería lo mismo.
3. Me imagino que VScrollProd es un control de tipo VScroll. Si te fijas tiene una propiedad Max. Yo le asignaría algún múltiplo de filas de controles botonprods que llevas y de la altura de los mismos, teniendo en cuenta ese 49 que supongo que es la distancia entre VScrollProd. De ese modo te será más fácil controlar en qué fila estás cuando encuentres el valor actual VScrollProd.Value.

Saludos.
Mi estimado desde ya mil gracias por la data y no te preocupes que toda critica siempre que sea buena la tomo como constructiva, ya que yo me considero novato en esto de la programación y VB6.

respecto a tu primera pregusta del porque del for y next, eso me puso a pensar y termine por descartarlo y dejar el código de la siguiente manera:

Código:
Private Sub VerticalScroll()

    Dim l As Double
    Dim a As Double
    Dim x As Double
    Dim AltoBt As Integer
    Dim nProds As Integer
    Dim AltoTotBt As Integer
    Dim indice As Integer

    indice = botonprods.Count

    nProds = indice / 4
    AltoBt = botonprods(1).Height + 49
    AltoTotBt = AltoBt * nProds

    x = VScrollProd.Value
    a = AltoTotBt - areaprods.Height
    l = (a * x) / 100
    botonprods(1).Top = -l

End Sub
con esto ya me funciono y efectivamente me hace el scrol, pero solo me lo hace sobre el botonprods(1)

y esto es porque en mi código en la ultima parte tengo declarado solo el 1, lo que no se me ocurre bien es como hacer para que me lo haga sobre todo los que tengo. Pero creo que aquí es en donde tengo que jugar con el i, o que opinan?

Saludos.
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #10 (permalink)  
Antiguo 22/01/2013, 14:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

¿El scroll no tenía que ir sobre areaprods?

Saludos.
  #11 (permalink)  
Antiguo 23/01/2013, 09:19
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

Cita:
Iniciado por ComprasDesdeCasa Ver Mensaje
¿El scroll no tenía que ir sobre areaprods?

Saludos.
No, va sobre los picturebox a desplazar.
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #12 (permalink)  
Antiguo 26/01/2013, 11:40
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Saber la cantidad de pic box generados en base al index y obtener el valor

Perfecto, entonces supongo que lo que necesitas es procesar esa última sentencia en un for:

Código vb:
Ver original
  1. for i =botonprods.LBound To botonprods.UBound
  2. botonprods(i).Top = -l
  3. next i

Aunque supongo que ya lo habrás comprobado, no?

Era el resultado que esperabas?

Saludos.

Etiquetas: box, cantidad, generados, index
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:00.