Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ayuda Con Componente Contenedor VPanel
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Ayuda Con Componente Contenedor VPanel 
 
Hola Comunidad!.

Me encuentro un problema con el componente VPanel, se aplicara a la mayoría de los componentes con hijos.

He hecho un programa de una manera y me gustaría aprovechar el array de componentes internos del propio VPanel.
No creo que haya puesto correctamente la instrucción.

El programa:
El formulario consta de dos Vpanel. Se pasan las imágenes del Vpanel1 al azar sin repetición al Vpanel2.
Eliminándolas del VPanel1.

Os pongo el trozo de código donde quiero cambiarlo y si necesitáis el código completo lo paso por aquí.


PUBLIC SUB btnAzar_Click()  
  DIM imgImaPanel AS PictureBox
  DIM azar AS Integer
  DIM x AS Integer  
  
  FOR x = 0 TO VPanel1.Children.Count - 1
      azar = Int(Rnd(0, VPanel1.Children.Count))
      imgImaPanel = NEW PictureBox(VPanel2)
      WITH imgImaPanel
          .Height = 125
          .Width = 125
          .Stretch = TRUE
          .Border = Border.Sunken  
          .Picture = Picture[sruta & aimagenes[azar]] 'Como hacer de otra manera.Así funciona
         '.Picture = Picture[VPanel1.Children[azar].Picture] 'Error,desconocido símbolo en la clase control
         '(no existe esa propiedad).Así no funciona.
      END WITH
      VPanel1.Children[azar].Delete 'Aqui a veces da objeto invalido (se perderá el hijo) :-)
  NEXT
END

 


¿ Si el componente hijo es un Picturebox, no se podría cargar el contenido de su imagen ?.

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Viernes, 03 Febrero 2012, 11:28; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayuda Con Componente Contenedor VPanel 
 
Si añado esto:

PUBLIC SUB btnAzar_Click()  
  DIM imgImaPanel AS PictureBox
  DIM azar AS Integer
  DIM x AS Integer  
  
  FOR x = 0 TO VPanel1.Children.Count - 1
      azar = Int(Rnd(0, VPanel1.Children.Count))
      imgImaPanel = NEW PictureBox(VPanel2)
      WITH imgImaPanel
          .Height = 125
          .Width = 125
          .Stretch = TRUE
          .Border = Border.Sunken  
          .Picture = Picture[sruta & aimagenes[azar]] 'Como hacer de otra manera
         '.Picture = Picture[VPanel1.Children[azar].Picture] 'Error,desconocido simbolo en la clase control(no existe esa propiedad)
      END WITH
      aimagenes.Delete(azar) 'Para que no se repitan, problema de usar dos arrays.
      VPanel1.Children[azar].Delete
      WAIT 0.1 'Espera un tiempo
  NEXT
END
 


Si añado Wait se toma un tiempo y el componente del array interno se borra sin problema.Parece que no le daba tiempo.   

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayuda Con Componente Contenedor VPanel 
 
Otra manera que he encontrado:

Esto aprovecharía el array interno del componente.

PUBLIC SUB btnAzar_Click()  
 DIM imgImaPanel AS PictureBox
  DIM azar AS Integer
  DIM x AS Integer  
  DIM oaux AS Object
  
  FOR x = 0 TO VPanel1.Children.Count - 1
     azar = Int(Rnd(0, VPanel1.Children.Count))
     oaux = VPanel1.Children[azar]  
     imgImaPanel = NEW PictureBox(VPanel2)
     WITH imgImaPanel
         .Height = 125
         .Width = 125
         .Stretch = TRUE
         .Border = Border.Sunken
         .Picture = oaux.Picture
     END WITH
     VPanel1.Children[azar].Delete 'Aquí podría haber puesto oaux.delete()
     WAIT 0.1
  NEXT
END
 


Si no quisiera que se eliminasen los hijos del Vpanel1 para pasarlos con "repetición" a VPanel2 con una variable
objeto me encuentro el problema que este objeto  tiene la dirección de memoria donde esta el PictureBox y se elimina del Vpanel1.
Y tendría que volver  al primer ejemplo con el array con los nombres de las imágenes y la ruta.

Con esto hace algo mas raro...
Al hacer click copia y borra de uno en uno, hay que darle de nuevo al botón para que lo haga con la segunda imagen,tercera..etc.

PUBLIC SUB btnAzar_Click()  
  DIM imgImaPanel AS PictureBox
  DIM azar AS Integer
  DIM oaux AS Object
    
  FOR EACH oaux IN VPanel1.Children    
    azar = Int(Rnd(0, VPanel1.Children.Count))
    oaux = VPanel1.Children[azar]
    imgImaPanel = NEW PictureBox(VPanel2)
    WITH imgImaPanel
         .Height = 125
         .Width = 125
         .Stretch = TRUE
         .Border = Border.Sunken          
         .Picture = oaux.Picture
     END WITH
     oaux.delete()
     WAIT 0.1
  NEXT
    
END
 


¿ Y si fuese una variable objeto pasada por valor a un procedimiento o función ?.
( Para que no se borrase el contenido de la variable objeto original y jugar con la copia de esta.)

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Domingo, 05 Febrero 2012, 11:17; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron