Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Otros entornos y lenguajes > .NET
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 23/12/2009
Tauro78 Tauro78 is offline
Miembro
 
Join Date: Sep 2006
Posts: 88
Poder: 21
Tauro78 Va por buen camino
Error: cannot access a disposed object named ...

hola, quisiera saber si me pueden ayudar en lo siguiente:

tengo una forma principal con un treeview a traves del cual llamo a un formulario hijo. Uso el patron Singleton para que solo haya una instancia.
El problema es que si abro y cierro y luego intento abrir nuevamente el formulario hijo me muestra este error: cannot access a disposed object named 'frmCuentasAltas'.
Supuestamente es porque el objeto referenciado ya no existe.

Uso el siguiente codigo:

Desde el formulario padre llamo al formulario hijo.

Código Delphi [-]
private void treeView1_DoubleClick(object sender, System.EventArgs e)
  {
   if (treeView1.Nodes[0].Nodes[2].Nodes[0].IsSelected)
   {
     frmCuentasAltas frmCA = frmCuentasAltas.InstanciaSingleton();
     frmCA.Show();
     frmCA.Owner = this;
   }

En el formulario hijo (frmCuentasAltas) uso creo el Singleton

Código Delphi [-]
private static frmCuentasAltas instanciaSingleton = null;
  public static frmCuentasAltas InstanciaSingleton()
  {
   if (instanciaSingleton == null)
   {
    instanciaSingleton = new frmCuentasAltas();
   }
   return instanciaSingleton;
  }
 
  private frmCuentasAltas()
  {
   //
   // Required for Windows Form Designer support
   //
   InitializeComponent();
   //
   // TODO: Add any constructor code after InitializeComponent call
   //
  }

Son formularios MDI.

Desde ya muchas gracias.

Last edited by Tauro78 : 23/12/2009 at 00:27.
Reply With Quote
  #2  
Old 23/12/2009
Crandel's Avatar
[Crandel] Crandel is offline
Miembro Premium
 
Join Date: May 2003
Location: Parana, Argentina
Posts: 1,475
Poder: 25
Crandel Va por buen camino
Obviamente como dice el error y supones el formulario ya no existe. Al cerrar el formulario lo que estas haciendo es destruir la instancia. El problema surge que tu instanciaSingleton no se entera.

Entonces tenes dos soluciones:

1. En el Dispose del formulario avisarle que ya no existe asi:

Código Delphi [-]
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
            instanciaSingleton = null;
        }

2. No dejar que se cierre, solo ocultarla. En el evento FormClosing lo cancelas. De esta forma sólo se creara una vez el formulario.

Código Delphi [-]
        private void frmCuentasAltas_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;
            Hide();
        }

Suerte
__________________
[Crandel]
Reply With Quote
  #3  
Old 23/12/2009
Tauro78 Tauro78 is offline
Miembro
 
Join Date: Sep 2006
Posts: 88
Poder: 21
Tauro78 Va por buen camino
gracias por la respuesta, no he probado las opciones, pero he aplicado algo que se parece mas a la primer opcion y me funciona, gracias.

Código Delphi [-]
 
 
public static frmCuentasAltas InstanciaSingleton()
  {
   if (instanciaSingleton == null)
   {
    instanciaSingleton = new frmCuentasAltas();
   }
   if (instanciaSingleton != null && instanciaSingleton.IsDisposed)
   {
    instanciaSingleton = null;
    instanciaSingleton = new frmCuentasAltas();
   }
   
   return instanciaSingleton;
  }
Reply With Quote
  #4  
Old 24/12/2009
Crandel's Avatar
[Crandel] Crandel is offline
Miembro Premium
 
Join Date: May 2003
Location: Parana, Argentina
Posts: 1,475
Poder: 25
Crandel Va por buen camino
Puedes simplificar tu condigo obteniendo la misma respuesta asi:

Código Delphi [-]
  public static frmCuentasAltas InstanciaSingleton()
  {
    if (instanciaSingleton == null || instanciaSingleton.IsDisposed)
    {
      instanciaSingleton = new frmCuentasAltas();
    }
   
    return instanciaSingleton;
  }
__________________
[Crandel]
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
error Named Pipes Provider nfrfabian Conexión con bases de datos 0 10/10/2007 19:39
Sobre error "Object reference not set to an instance of an object" fer21unmsm .NET 2 11/05/2007 21:56
Error A component Named Matri already Exists janlo Varios 5 28/07/2006 07:16
Error en Consulta: 'could not find object' rocio84 SQL 4 18/04/2006 01:56
Error: object not found shaktale SQL 0 03/07/2003 16:40


All times are GMT +2. The time now is 12:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi