Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Pasar Un Control De Un Formulario A Otro Formulario

Pasar Un Control De Un Formulario A Otro Formulario
Artículo
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



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Jueves, 02 Febrero 2017, 21:19 ]
 


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




 
última edición por shordi el Viernes, 03 Febrero 2017, 10:18; editado 2 veces 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Viernes, 03 Febrero 2017, 10:17 ]
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 usuario Enviar mensaje privado  
tincho [ Viernes, 03 Febrero 2017, 11:45 ]
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



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 03 Febrero 2017, 12:54 ]
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



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 03 Febrero 2017, 13:53 ]
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.



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Viernes, 03 Febrero 2017, 19:06 ]
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



 
última edición por Shell el Viernes, 03 Febrero 2017, 21:26; editado 1 vez 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 03 Febrero 2017, 21:24 ]
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.



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Sabado, 04 Febrero 2017, 12:09 ]
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



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Sabado, 04 Febrero 2017, 19:13 ]
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
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