Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Pasar Un Control De Un Formulario A Otro Formulario
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Pasar Un Control De Un Formulario A Otro Formulario 
 
Buenas!.

Quiero pasar un control completo a otro formulario.
En este caso se trata de un Picturebox. Sé que el otro formulario se va a mostrar solamente una imagen.
Se podría haber hecho de otra forma si solo es pasar una imagen.

Ambos formularios están vacíos, los controles se crean en tiempo de ejecución.
El primer problema que me encontré fue instanciar el control en el formulario destino.
Ese control que se le pasa con una propiedad, ya tiene valores. No es nuevo.

Imaginar que no tiene por que ser un PictureBox, lo que queréis pasarle, conociendo los tipos de controle que quieres pasar.
Se instanciaría un tipo determinado.

Me gustaría saber si creéis que el código del formulario destino se puede mejorar.

Formulario origen:

Private dibujo As Picture
Private picejemplo As Picturebox
Private unformulario As FormDestino

Public Sub Form_Open()

  dibujo = Picture["Gambas3.png"]

  With Me
    .Title = "Origen"
    .Arrangement = Arrange.Vertical
    .AutoResize = True  
  End With
    
  picejemplo = New PictureBox(Me) As "manejador"
  With picejemplo  
    .W = dibujo.W
    .H = dibujo.H
    .Picture = dibujo
  End With
    
  unformulario = New FormDestino
  unformulario.objeto = picejemplo
  unformulario.Show()
  
End
 


Formulario Destino:

Private $objeto As Object
Property objeto As Object

Public Sub Form_Open()

  Dim opbox As PictureBox
 
  With Me
    .Title = "Destino"
    .Arrangement = Arrange.Vertical
    .AutoResize = True
  End With
  
  If Me.objeto Is PictureBox Then
    opbox = New PictureBox(Me) As "manejador"
    With opbox
      .W = Me.objeto.w
      .H = Me.objeto.h
      .Picture = Me.objeto.Picture
    End With  
  Endif
  
End

Private Function objeto_Read() As Object
  
  Return $objeto
  
End

Private Sub objeto_Write(Value As Object)
  
  $objeto = Value
  
End
 


Aquí tenéis el ejemplo.

Saludos

PasarUnObjeto.tar.gz
Descripción: Pasar un control de un formulario a otro formulario 
Descargar
Nombre del archivo: PasarUnObjeto.tar.gz
Tamaño: 42.08 KB
Descargado: 27 veces
PasarUnObjeto.tar.gz
Descripción: Pasar un control de un formulario a otro formulario 
Descargar
Nombre del archivo: PasarUnObjeto.tar.gz
Tamaño: 42.08 KB
Descargado: 27 veces
PasarUnObjeto.tar.gz
Descripción: Pasar un control de un formulario a otro formulario 
Descargar
Nombre del archivo: PasarUnObjeto.tar.gz
Tamaño: 42.08 KB
Descargado: 27 veces

 




===================
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: Pasar Un Control De Un Formulario A Otro Formulario 
 
Sin olvidar las posibilidades del procedimiento de instaciación _new del form2

en el form1:

dim f as form2

f=new form2(f, mipicturebox) 'le paso f (él mismo) porque gambas exige aquí el nombre del contenedor

 


En el form2

private pbox as picturebox
public sub _new(optional pictbox as picturebox)

pbox = pictbox

end
 

 




===================
No podemos regresar
 
última edición por shordi el Viernes, 03 Febrero 2017, 10:18; editado 2 veces 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pasar Un Control De Un Formulario A Otro Formulario 
 
No termino de entender que aplicaciones tiene el pasar un control de un formulario a otro formulario.??

Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pasar Un Control De Un Formulario A Otro Formulario 
 
Tincho:

Citar:

No termino de entender que aplicaciones tiene el pasar un control de un formulario a otro formulario.??


Hace poco Julio estuvo creando un ejemplo en el que desde un formulario podía controlar las propiedades
de los controles que estaban en otro formulario. Su ancho, alto, color (por decir algo).

Al pasar controles a otros formularios, estas construyendo en parte un formulario en tiempo real.
Cuando tienes un lienzo vacío, dibujas y coloreas. ¿ Estaba creado o lo hiciste en tiempo real ?.

Shordi:

Aplicaré lo que has mostrado y si hay algún problema te cuento como va.

En realidad esto es un pequeño ejemplo, de otra cosa que estaba haciendo. Solo que necesitaba
poder hacer esto para entenderlo mejor y continuar con el trabajo anterior.

Gracias.

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: Pasar Un Control De Un Formulario A Otro Formulario 
 
Shordi:

Vale, he eliminado la propiedad objeto del Formulario Destino y usado el constructor new, donde
le paso a la variable privada el parámetro del argumento del constructor.

Entiendo la forma. De esa manera puedo pasar el control completo.
Pero no lograba mostrar el picturebox en el formulario destino.

Formulario Destino, antes:

Private $objeto As Object
Property objeto As Object

Public Sub Form_Open()

  Dim opbox As PictureBox
 
  With Me
    .Title = "Destino"
    .Arrangement = Arrange.Vertical
    .AutoResize = True
  End With
  
  If Me.objeto Is PictureBox Then
    opbox = New PictureBox(Me) As "manejador"
    With opbox
      .W = Me.objeto.w
      .H = Me.objeto.h
      .Picture = Me.objeto.Picture
    End With  
  Endif
  
End

Private Function objeto_Read() As Object
  
  Return $objeto
  
End

Private Sub objeto_Write(Value As Object)
  
  $objeto = Value
  
End
 


Despues:

Private pbox As PictureBox

Public Sub _new(Optional pictbox As Picturebox)
  
  pbox = pictbox
  
End

Public Sub Form_Open()
  Dim otropicturebox As PictureBox
    
  With Me
    .Title = "Destino"
    .Arrangement = Arrange.Vertical
    .AutoResize = True
  End With
  
 'Doy por sentado que conozco el tipo del objeto que he pasado
  otropicturebox = New PictureBox(Me)
    
  With otropicturebox
    .W = pbox.W
    .H = pbox.H
    .Picture = pbox.Picture
  End With  
  
End
 


Pregunta: ¿ Cual es la razón  por la que directamente no puedo mostrar pbox en el formulario destino ?.
Me he tenido que valer de otro objeto del mismo tipo que he instanciado en el formulario destino, asignándole las propiedades de pbox.

Espero que se me entienda. Creo que no es difícil de captar la idea. El resultado final es dos formularios visualmente iguales.

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: Pasar Un Control De Un Formulario A Otro Formulario 
 
Citar:
¿ Cual es la razón  por la que directamente no puedo mostrar pbox en el formulario destino ?.

Cuando pasas un objeto lo que estás pasando es una referncia en memoria a dicho objeto. No una copia del mismo. Con ello consigues acceso total al control pasado pero no dos objetos distintos en dos formularios. Si lo que quieres es mostrarlo en el segundo formulario imagino (nunca lo he hecho) que símplemente con un objeto.reparent(me) y objeto.show() sería suficiente...

Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pasar Un Control De Un Formulario A Otro Formulario 
 
Shordi:

Si, es un referencia lo que se le pasa.

Citar:

 Si lo que quieres es mostrarlo en el segundo formulario imagino (nunca lo he hecho) que símplemente con un objeto.reparent(me) y objeto.show() sería suficiente...


Al usar reparent(me)  y luego show ha hecho un efecto de lo más raro.Ha desaparecido el picturebox del formulario origen y
ha aparecido solo en formulario destino. Se ha teletransportado.  

Public Sub Form_Open()
  Dim otropicturebox As PictureBox
    
  With Me
    .Title = "Destino"
    .Arrangement = Arrange.Vertical
    .AutoResize = True
  End With

  pbox.Reparent(Me)
  pbox.Show()

End    
 


Habría que pasarle mejor una copia del objeto.

Acabas de dejar a un padre sin su hijo!!!.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Viernes, 03 Febrero 2017, 21:26; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pasar Un Control De Un Formulario A Otro Formulario 
 
Citar:
Al usar reparent(me)  y luego show ha hecho un efecto de lo más raro.Ha desaparecido el picturebox del formulario origen y
ha aparecido solo en formulario destino. Se ha teletransportado.  


¿Raro? ¿qué esperabas? es un único objeto que está aquí o está allí. Si quieres tener dos, necesitas dos, para lo cual o los creas en tiempo de diseño iguales y luego pasas sólo la propiedad picture o creas el segundo en tiempo de ejecución y copias una a una todas las propiedades del primer objeto.
No existe, aunque creo que se podría crear fácilmente, un procedimiento genérico para duplicar objetos.

Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Pasar Un Control De Un Formulario A Otro Formulario 
 
Citar:

... o creas el segundo en tiempo de ejecución y copias una a una todas las propiedades del primer objeto.


Esto fue lo que hice desde el primer momento. Creía que había otras formas.
O que no lo estaba haciendo correctamente.  

Podemos pasar la copia de un array, pero no la copia de un objeto, siendo un array un objeto.
Bueno, todo en el fondo es un objeto.

Citar:

No existe, aunque creo que se podría crear fácilmente, un procedimiento genérico para duplicar objetos.


Aunque estuvimos hablando ya hace un tiempo. En el blog de Julio encontré esto:

POO. Copiar objetos

No he podido verlo con algo más de 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
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Cambiar El TextBox De Un Formulario, Con E... CanihoJR General 14 Sabado, 17 Octobre 2009, 16:51 Ver último mensaje
david
No hay nuevos mensajes Cargar Datos De Un Formulario En Otro Form... Josec General 1 Martes, 08 Noviembre 2011, 17:57 Ver último mensaje
jsbsan
No hay nuevos mensajes Convertir Un Formulario En Un Contenedor D... vr_rv Controles/Librerías/Componentes 8 Sabado, 25 Junio 2016, 22:46 Ver último mensaje
vuott
No hay nuevos mensajes Usar Un Control SerialPort De Otro Formulario Tasagore Controles/Librerías/Componentes 6 Viernes, 01 Julio 2016, 10:30 Ver último mensaje
Tasagore
 

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

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
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