• Viernes 3 de Mayo de 2024, 18:33

Autor Tema:  Clonar un Control de Usuario  (Leído 1566 veces)

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Clonar un Control de Usuario
« en: Jueves 2 de Diciembre de 2010, 17:27 »
0
Estimados,

Estoy desarrollando una aplicacion en la cual uso controles de usuarios, bueno lo que quiero hacer es clonar un control de usuario que se muestra en un Form y mostrarlo en otro Form , pero quiero hacerle una clonacion superficial ya que dentro del control tengo otras clases y variables por referencia que quiero copiar. uso el metodo MemberwiseClone() para hacer la "Shallow Copy", el problema es que cuando muestro el segundo formulario se me queda en blanco como tonteando. esto es lo que hago

            IClasePadre Clase = new GTSOLICITANTE(); // aqui instancio el control de usuario //iclasepadre es una interfaz
            this.Controls.Add(Clase.Control);//agrego el contrlol de la clase a los controles del formulario
            IClasePadre Clase2 =(IClasePadre) Clase.Clone(); //creo el clone de la clase()
            Form Fr = new Form(); //creo el formulario
            Fr.Controls.Add(Clase2.Control);// agrego el contrl de la clase clon a los controles del nuevo formularios
            Fr.Refresh(); //refresco
            Fr.Show(); // y muestro pero aqui el formulario se bloquea y se hace una especie de bug donde tengo que para la ejecucion

quisiera saber que puede estar pasando, tengo ciertas hipotesis, bueno una de un amigo que desarrolla conmigo el proyecto dice que esta mal implementado el Clone(), pero si realiza el clon cuando yo muestro el control de la Clase clonada en l formulario original sin crear un nuevo si lo muestra pero cuando intento mostrar los dos controles en formularios distintos no los muestra... mi hipotesis seria que el visual genera una excepcion cuando trato de mostrar 2 controles que hacen referencia al mismo sitio de memoria , no se la verdad. espero me puedan ayudar

Saludos Coriales

Altrox

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: es
    • Ver Perfil
Re: Clonar un Control de Usuario
« Respuesta #1 en: Sábado 11 de Diciembre de 2010, 05:21 »
0
Hola buenas, la respuesta llega bastante tarde pero bueno.
Lo que viene a continuación lo uso para controlar un formulario desde otro, pero creo que te puede servir.
Creas un Form llamado Form1 y otro llamado form2(por ejemplo) desde el explorador de soluciones
dentro de From1 pones
Código: C#
  1.  
  2. ControlUsuario Clase = new ControlUsuario();
  3. this.Controls.Add(Clase);
  4. form2 fr = new form2(Clase);
  5.  
  6.  
y en el form2 en el constructor pones
Código: C#
  1.  
  2. private ControlUsuario Clase2;
  3. public form2(ControlUsuario ClaseRecivida)
  4.         {
  5.             InitializeComponent();
  6.             this.Clase2 = ClaseRecivida;
  7.             this.Controls.Add(Clase2);
  8.         }
  9.  
  10.  
y de esta manera tienes en el form2 una clase ControlUsuario igual a la del Form1.
Espero que te solucione algo.
Saludos!

javierkcjm

  • Miembro activo
  • **
  • Mensajes: 48
  • Nacionalidad: ec
    • Ver Perfil
Re: Clonar un Control de Usuario
« Respuesta #2 en: Lunes 13 de Diciembre de 2010, 20:49 »
0
Amigo gracias por tu respuesta, pero bueno no se si me di a entender pero lo que quiero es que el formulario este duplicado en otra ventana, lo resolvi creando una nueva instancia del contro y pasando las clases y objetos compartidos, pero bueno lo que queria hacer era usar el metodo this.MemberwiseClone(); ya que crea una copia superficial de la clase!! pero al mostrar los dos formularios se me cae ya que como es una copìa superficial debe mostrar dos objetos en distintos sitios , supongo yo por eso es el problema!!!