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

controles dinamicos en tiempo de ejecucion

Estas en el tema de controles dinamicos en tiempo de ejecucion en el foro de Visual Basic clásico en Foros del Web. hola todos, acá molestándolos otra vez, ahora estoy tratando de crear una serie de botones de manera dinámica según lo que yo tenga en una ...
  #1 (permalink)  
Antiguo 02/01/2013, 11:39
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Pregunta controles dinamicos en tiempo de ejecucion

hola todos, acá molestándolos otra vez, ahora estoy tratando de crear una serie de botones de manera dinámica según lo que yo tenga en una tabla en la base de datos.

Después de estar unas cuantas horas en internet encontré que tengo que crear los controles en tiempo de ejecución.

Encontré un ejemplo muy util pero en este no esta como relacionan el ejemplo con una tabla en una db.

primero les dejo el código que encontré:
Código:
Dim Looping As Byte
For Looping = 1 To 5
         Load textoprods(Looping)
         textoprods(Looping).Left = textoprods(0).Left
         textoprods(Looping).Top = textoprods(Looping - 1).Top + textoprods(Looping - 1).Height
         textoprods(Looping).Visible = True
         Load botonprods(Looping)
         botonprods(Looping).Left = botonprods(0).Left
         botonprods(Looping).Top = botonprods(Looping - 1).Top + botonprods(Looping - 1).Height
         botonprods(Looping).Visible = True
Next Looping
botonprods y textoprods son 2 elementos que tengo en mi form con el indice 0.

Aquí tengo 2 detalles, uno es como vincular eso con mi tabla en mi db, y 2 como poder ordenar los botones y cajas de texto para que parezcan uno al lado del otro y al completar cierto ancho que se muevan un renglón abajo.

Espero haberme explicado bien, y si me pueden ayudar con esto se los voy a agradecer muchísimo.

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
  #2 (permalink)  
Antiguo 03/01/2013, 14:11
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Exclamación Respuesta: controles dinamicos en tiempo de ejecucion

Bueno les comento que después de estar ya no se cuantas horas en la web viendo tutoriales he logrado que me funcione, pero tengo un problema y ya no se bien por donde correr.

el sistema me muestra toda la info de mi tabla pero me pone los iconos uno debajo del otro, cuando yo quiero que lo ponga de izquierda a derecha, les dejo el codigo que tengo:

Código:
conectar

rs.Open ("select * from productos"), sisdb, adOpenStatic, adLockOptimistic
If rs.RecordCount > 0 Then
    rs.MoveLast
    rs.MoveFirst
    
    textoprods(0) = rs.Fields!nombre
    botonprods(0).Picture = LoadPicture(App.Path & (rs.Fields!ligaimg))
    If rs.RecordCount > 1 Then
        rs.MoveNext
        Let i = 1
            Do Until rs.EOF
                Load textoprods(i)
                textoprods(i).Visible = True
                textoprods(i).Left = textoprods(i).Left
                textoprods(i).Top = textoprods(i - 1).Top + textoprods(i - 1).Height + 10
                textoprods(i).Text = rs.Fields!nombre
                
                Load botonprods(i)
                botonprods(i).Visible = True
                botonprods(i).Left = botonprods(i).Left
                botonprods(i).Top = botonprods(i - 1).Top + botonprods(i - 1).Height + 10
                botonprods(i).Picture = LoadPicture(App.Path & (rs.Fields!ligaimg))
                
                rs.MoveNext
                i = i + 1
            Loop
        End If
End If

sisdb.Close
textoprods es un textbox
botonprods en un pictbox

Segun yo tengo entendido, la siguiente linea de comando es para que me alinea uno a la derecha del otro.:

Código:
textoprods(i).Left = textoprods(i).Left
pero no funciona.
__________________
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
  #3 (permalink)  
Antiguo 03/01/2013, 14:53
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: controles dinamicos en tiempo de ejecucion

Hola, para ajustar 'adosando' los objetos, debes trabajar con las Propiedades Letf y Top de cada uno de ellos.

Ten en cuenta que Left es la posicion Izquierda de la Pantalla y Top es la posicion superior, además debes tener en cuenta las propiedades Width y Height de los controles.

O sea para ponerte un ejemplo, Si tienes un TextBox(1) que quieres poner a la derecha de un Command(1) dependiendo de donde este el Command(1), deberias hacer

Text(1).Left = Command(1).Left + Command(1).Width
Text(1).Top = Command(1).Top

De este modo consigues el resultado, o sea a la posicion Left le debes sumar el Width para situarte a la derecha y a la posicion Top le debes sumar el Height del objeto para posicionarte debajo de este.

Es un poco la idea para que puedas ver donde debes corregirlo.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #4 (permalink)  
Antiguo 04/01/2013, 10:03
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Exclamación Respuesta: controles dinamicos en tiempo de ejecucion

jejej ya logre solucionar mi problema, el detalle fue que después de muchas horas enfrente de la pantalla ya no sabes ni lo que pones.

ahora el problema que tengo es otro estoy haciendo la función click de mi botón y estoy teniendo un problema con este, primero les dejo el codigo que me da problemas

Código:
Dim folioprod, nombreprod, presentacionprod, precioprod, prodselec As Integer

prodselec = botonprods(Index + 1) 'en esta parte estoy teniendo el problema

conectar

rs.Open ("select * from productos where folio = '" & prodselec & " ' "), sisdb, adOpenStatic, adLockOptimistic
folioprod = rs.Fields!folio
nombreprod = rs.Fields!nombre
presentacionprod = rs.Fields!presentacion
precioprod = rs.Fields!precio
inv = rs.Fields!cantidad
sisdb.Close
como pueden ver estoy declarando a prodselec como integer y me da un error de overflow, porque el dato que me esta dando es demasiado grande, si lo pongo como string obtengo el dato, pero no es el correcto.

la idea de lo que quiero hacer es simple, quiero tomar el valor del index de mi picturebox botonprods y sumarle uno, ese valor pasárselo a la sentencia de sql para realizar la busqueda y todos felices.

ya intente usar Val pero me parece que o no lo supe hacer o no es la funcion correcta.

espero me puedan ayudar un poco con esto.

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
  #5 (permalink)  
Antiguo 04/01/2013, 11:22
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: controles dinamicos en tiempo de ejecucion

Estas usando el contenido del picturebox en lugar del index.
Si este código está en el picturebox. el index es la variable "Index".
Cambia:
prodselec = botonprods(Index + 1)
por:
prodselec = Index + 1
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #6 (permalink)  
Antiguo 04/01/2013, 12:29
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Exclamación Respuesta: controles dinamicos en tiempo de ejecucion

jajajaj era mas facil de lo que parecia, ahora tengo otro detalle y creo que es similar al anterior.

tengo el codigo:
Código:
    COMA = "select * from productos where folio  =  " + prodselec
    Adodc1.RecordSource = COMA
    Adodc1.Refresh
pero me esta arrojando un error 13, type mismatch
__________________
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
  #7 (permalink)  
Antiguo 07/01/2013, 06:36
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: controles dinamicos en tiempo de ejecucion

No será que la variable COMA es un integer?
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #8 (permalink)  
Antiguo 07/01/2013, 10:22
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Exclamación Respuesta: controles dinamicos en tiempo de ejecucion

Cita:
Iniciado por pkj Ver Mensaje
No será que la variable COMA es un integer?
No la variable COMA la tengo declarada como string.

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
  #9 (permalink)  
Antiguo 07/01/2013, 14:41
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: controles dinamicos en tiempo de ejecucion

Yo es que a las bases de datos les tengo alergia desde siempre y no he querido aprender.
De todas formas me suena a que .RecordSource se refiere al fichero de datos mas que a una busqueda, o lo que sea eso del select, pero yo no te puedo ayudar.
Suerte.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #10 (permalink)  
Antiguo 07/01/2013, 14:58
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: controles dinamicos en tiempo de ejecucion

Un comentario, que no sé si puede estar relacionado con el problema que comentas con la variable COMA.

La definición de variables de este modo:
Dim folioprod, nombreprod, presentacionprod, precioprod, prodselec As Integer

significa que las variables folioprod, nombreprod, presentacionprod, precioprod son Variant y la que realmente es Integer es prodselec.

No sé cómo has definido realmente la variable COMA. Si lo has hecho de este modo, es posible que confundas un variant con un string.

Otro detalle... para concatenar strings utiliza el símbolo & en lugar del símbolo +. Prueba de este modo:

"select * from productos where folio = " & cstr(prodselec)

Saludos.
  #11 (permalink)  
Antiguo 08/01/2013, 13:17
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: controles dinamicos en tiempo de ejecucion

Cita:
Iniciado por ComprasDesdeCasa Ver Mensaje
Un comentario, que no sé si puede estar relacionado con el problema que comentas con la variable COMA.

La definición de variables de este modo:
Dim folioprod, nombreprod, presentacionprod, precioprod, prodselec As Integer

significa que las variables folioprod, nombreprod, presentacionprod, precioprod son Variant y la que realmente es Integer es prodselec.

No sé cómo has definido realmente la variable COMA. Si lo has hecho de este modo, es posible que confundas un variant con un string.

Otro detalle... para concatenar strings utiliza el símbolo & en lugar del símbolo +. Prueba de este modo:

"select * from productos where folio = " & cstr(prodselec)

Saludos.

Jejejej que interesante con el solo echo de cambiar el parámetro ya funciono a la perfección.

el detalle se encontraba en esto & cstr(prodselec)

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

Etiquetas: controles, dinamicos, ejecucion, formulario
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 19:43.