Como clonar un Control en Visual basic Net

Como puedo clonar o copiar un control en visual basic net. Porque usando "=" copia el objeto pero destruye el objeto copiado.?
¿Existe alguna un método o función que permita esto?

10 Respuestas

Respuesta
1
Corrección:
'=' no destruye el objeto
Sino que mueve la referencia del objeto copiado al nuevo, por este motivo el nuevo queda con todos los datos y el antiguo sin nada, por lo que básicamente deja de existir.
Una forma de clonar un objeto es mediante Serialización
Pero la pregunta es... ¿Qué tipo de objetos deseas clonar?
¿Controles? Tipos Base como Enteros, ¿Caracteres? ¿O Clases Construidas por ti mismo?
Respuesta
1
No entiendo muy bien tu pregunta, creo que quieres que un control ya armado, tons lo que tienes que hacer, aunque no he probado seria algo así.
Tienes un control Texbox llamado TxtNombre y TxtOtro
dim oText as new TextBox
oText=TxtNombre
TxtOtro=oText
Como te digo es algo no he probado.
Respuesta
1
puedes usar Dim Objeto as control = Objeto2. Clone
o puedes crear un nuevo obejeto del mismo tipo con:
Dim Objeto as  new Objeto2
(No recuerdo bien la sintaxis de Vb) pero la ida es esa
Respuesta
1
Utiliza el método .Copy o el método .Clone que tiene el control.
Respuesta
1
¿Qué version del .net estas usando?
Primero, creo que deberás importar el espacio de clases System. Reflection luego probá lo siguiente (código para C#), a mi me ha funcionado:
private void Clonar(object src, object tgt)
{
PropertyInfo[] props = src.GetType().GetProperties();
foreach (PropertyInfo pi in props)
{
if (pi.CanWrite)
pi.SetValue(tgt, pi.GetValue(src, null), null);
}
}
Para VB sería casi igual. ¿Me avisas si te funciona ok?
Respuesta
1
Si asignamos un objeto a otro usando el símbolo = lo que tenemos es dos variables apuntando a la misma instancia si cambiamos uno cambiamos el otro y si destruimos uno destruimos el otro, si lo que queremos es una copia del objeto el símbolo = no nos vale,
Algunos objetos de .net como la clase DataSet incorporan el método Clone() para hacer copias de objetos
Pero si queremos una funcionalidad similar en nuestros propios objetos tendremos que hacerlo a mano
¿Cómo? Implementando la interfaz IClonable
Aquí tenéis un ejemplo en Visual Basic si queremos hacerlo en C# simplemente hay que cambiar Implements por : (dos puntos)
Public Class CEmpleado
Implements ICloneable
'Declaramos las variables publicas en vez de usar propiedades por simplicidad
Public M_nombre
Public M_apellido
'Las funciones no necesitan clonarse
Public Function QuienSoy() As String
Return M_nombre & "" & M_apellido
End Function
Public Function Clone() As Object Implements System.ICloneable.Clone
'Creamos una instancia de mi mismo, es perfectamente posible
Dim EmpleadoClonado As New CEmpleado
'La copia tiene que ser miembro a miembro
EmpleadoClonado.M_nombre = Me.M_nombre
EmpleadoClonado.M_apellido = Me.M_apellido
'Devolvemos el objeto que acabamos de crear
Return EmpleadoClonado
End Function
End Class
Una vez hecho esto sólo tenemos que llamar al método Clone sobre la instancia de nuestro objeto de tipo Cempleado
Respuesta
1
No entiendo muy bien cual es tu idea hacer de copiar o clonar el objeto, me imagino que quieres que las propiedades sean las mismas, y no se tampoco que tipo de control es el que quieres copiar, si pudieras ser un poco más especifico en lo que quieres hacer podría ayudarte de una mejor forma, así que por favor explicame un poco más y te ayudo
Respuesta
1
No he trabajado mucho con VB.NET, pero creo que los enlaces que te envío pueden responder a tu duda:
http://jmarcost.blogspot.com/2007/02/clonar-un-control.html
http://www.devjoker.com/html/Como-clonar-objetos-net-implementando-Iclonable.html
Cualquier consulta que te surja no dudes en preguntarme de nuevo, y trataré de ayudarte en todo lo que pueda.
Respuesta
1
Tienes que volver a instanciarlo con o sin new, depende lo que quieras
en c# es clase  objeto = new clase;
pe. Dataset ds1 = new Dataset()
Pero me parece muy raro eso que comentas que se destruye el objeto copiado,
eso solo ocurre si sales del entorno del objeto es decir si lo creas en un for pues al salir del for, revisa cuando y que tipo de objeto es el que se destruye ( public, private...)
Si estas en una función cuando se crea, al principio, fuera de iteraciones etc.
Respuesta
¿Podrías copiarme el código que introduces?
A parte, ¿para qué necesitas copiar controles?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas