elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  ayuda para destruir user control
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda para destruir user control  (Leído 2,104 veces)
d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
ayuda para destruir user control
« en: 22 Febrero 2016, 17:33 pm »

hola todos, tengo  un user control, este ultimo lo muestro en un panel de un form (visula express 2012 desktop), el user control tiene textbox, listbox..., la instancia del user control:
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using RNUcodigo;
  11. using RNUDataAccess;
  12. using RNUEntities;
  13.  
  14. namespace UI
  15. {
  16.    public partial class UCnuevoUsuario : UserControl
  17.    {
  18.        private static UCnuevoUsuario _Instance;
  19.  
  20.        public static UCnuevoUsuario Instance
  21.        {
  22.  
  23.            get
  24.            {
  25.                if (_Instance == null)
  26.                    _Instance = new UCnuevoUsuario();
  27.                return _Instance;
  28.            }//get
  29.        }//instanciando el userContol
  30.  
  31.  
  32.        public UCnuevoUsuario()
  33.        {
  34.            InitializeComponent();
  35.        }
  36.  
  37.  
lo muestro en el panel del form principal asi:

Código
  1. private void agregarToolStripMenuItem_Click(object sender, EventArgs e)
  2.        {
  3.            if (!panel1.Controls.Contains(UCnuevoUsuario.Instance))
  4.            {
  5.                panel1.Controls.Add(UCnuevoUsuario.Instance);
  6.                UCnuevoUsuario.Instance.Dock = DockStyle.Fill;
  7.                UCnuevoUsuario.Instance.BringToFront();
  8.  
  9.            }//if
  10.            else {
  11.                UCnuevoUsuario.Instance.BringToFront();
  12.            }//else
  13.        }
  14.  

y lo remuevo del panel asi:

Código
  1. private void btnsalir_Click(object sender, EventArgs e)
  2.        {
  3.            this.Parent.Controls.Remove(this);
  4.        }
  5.  

pero cuando lo vuelvo a abrir me aparece con los datos que le había ingresado anteriormente, habrá otra opción de destruirlo sin ponerle a cada textbox.text = "" del usercontrol, para que no me aparezca lleno cuando vuelva a llamarlo?


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: ayuda para destruir user control
« Respuesta #1 en: 22 Febrero 2016, 18:20 pm »

Eliminar manualmente un user-control de una colección de controles no implica su auto-liberación, el método base Dispose no se llama (sin embargo, esto no se aplica al liberar manualmente un Form, y su colección de controles), así que una solución a la forma en la que tienes adaptado el código original que has posteado, sería la siguiente (ni falta decir que esto es muy incorrecto):

Código
  1. protected override void OnVisibleChanged(EventArgs e) {
  2. if (!base.Visible) {
  3. _Instance = null;
  4. }
  5. base.OnVisibleChanged(e);
  6. }

En general, la metodología que estás desarrollando en la Class para utilizar el control es inapropiada, ¿por que simplemente no usas el constructor base de la class para instanciar el user-control?, además de ser una solución al problema.

Puedes hacerlo de la siguiente manera:

Código
  1. Public NotInheritable Class MyControl : Inherits UserControl
  2. End Class
+
Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Friend WithEvents UserControl1 As MyControl
  4.  
  5.    Public Sub New()
  6.  
  7.        ' This call is required by the designer.
  8.        InitializeComponent()
  9.  
  10.        ' Add any initialization after the InitializeComponent() call.
  11.        Me.UserControl1 = New MyControl
  12.  
  13.    End Sub
  14.  
  15.    ' Añadir
  16.    Private Sub Button1_Click(sender As Object, e As EventArgs) _
  17.    Handles Button1.Click
  18.  
  19.        If Me.UserControl1.IsDisposed Then
  20.            Me.UserControl1 = New MyControl
  21.        End If
  22.  
  23.        Me.Controls.Add(Me.UserControl1)
  24.    End Sub
  25.  
  26.    ' Liberar
  27.    Private Sub Button2_Click(sender As Object, e As EventArgs) _
  28.    Handles Button2.Click
  29.  
  30.        Me.UserControl1.Dispose()
  31.  
  32.    End Sub
  33.  
  34. End Class

Taducción online a C#:
Código
  1. public sealed class MyControl : UserControl {
  2. }
+
Código
  1. public sealed class Form1 : Form {
  2.  
  3.    internal MyControl UserControl1;
  4.  
  5.    public Form1() {
  6.        this.UserControl1 = new MyControl();
  7.    }
  8.    // faltan los handlers en la conversion.
  9.  
  10.    // Añadir
  11.    private void Button1_Click(object sender, EventArgs e) {
  12.        if (this.UserControl1.IsDisposed) {
  13.            this.UserControl1 = new MyControl();
  14.        }
  15.        this.Controls.Add(this.UserControl1);
  16.    }
  17.  
  18.    // Liberar
  19.    private void Button2_Click(object sender, EventArgs e) {
  20.        this.UserControl1.Dispose();
  21.    }
  22. }
  23.  
  24. //=======================================================
  25. //Service provided by Telerik (www.telerik.com)
  26. //=======================================================

Saludos!


« Última modificación: 22 Febrero 2016, 19:23 pm por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Zyxel P-870HW-51A V2 : Problema de seguridad. Acceso oculto con user/user
Noticias
wolfbcn 0 4,203 Último mensaje 23 Octubre 2011, 16:04 pm
por wolfbcn
[Ayuda] Destruir sesion al cambiar de pagina por href
PHP
Graphixx 3 2,968 Último mensaje 12 Enero 2013, 07:08 am
por ~ Yoya ~
Problema con los user control
.NET (C#, VB.NET, ASP)
kaiserdj 1 5,425 Último mensaje 7 Febrero 2018, 23:10 pm
por Eleкtro
[SOURCE-CODE] DWM Thumbnail User Control
.NET (C#, VB.NET, ASP)
Eleкtro 2 5,603 Último mensaje 12 Agosto 2018, 23:54 pm
por Eleкtro
[Aporte] LabelPlus (user control) « 1 2 »
Programación Visual Basic
LeandroA 12 10,806 Último mensaje 16 Diciembre 2020, 02:58 am
por BlackZeroX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines