Error al abrir un formulario 35 veces.

29/03/2010 - 10:59 por Sofia | Informe spam
Buenos días,



Tengo una aplicación windows en C# y me da un error un poco raro. Os intento
explicar lo que me pasa:



Tengo dos formularios, form1 y form2. Desde form1, cuando hago doble click
en un datagridview abro el form2 con el detalle del valor que tenía
seleccionado en el form1. Cuando pulso un botón en el form2 cierro ese
formulario, vuelvo al form1, me muevo al registro siguiente y vuelvo a abrir
el form2. La operatoria es sencilla y me funciona correctamente, pero si
esto lo hago mas de 35 veces me salta el siguiente error:



"No se controló Win32Exception" " Error al crear identificador de ventana".





Código del botón del form2:

form1.frmSender = "SIGUIENTE";

this.Dispose();

this.Close();



Código que tengo en el activate del form1:

if (frmSender == "SIGUIENTE")

{

if (dgDatos.CurrentCell.RowIndex != dgDatos.RowCount-1)

{

dgDatos.Rows[dgDatos.CurrentCell.RowIndex + 1].Cells[1].Selected
= true;

dgDatos.CurrentCell = dgDatos.Rows[dgDatos.CurrentCell.RowIndex
+ 1].Cells[1];

form2 frm = new form2 (Articulo);

frm.ShowDialog();

}

}





Muchas gracias y un saludo.

Sofía Mancebo.

Preguntas similare

Leer las respuestas

#1 SoftJaén
29/03/2010 - 15:48 | Informe spam
"Sofia" escribió:

Código que tengo en el activate del form1:

if (frmSender == "SIGUIENTE")

{

if (dgDatos.CurrentCell.RowIndex != dgDatos.RowCount-1)

{

dgDatos.Rows[dgDatos.CurrentCell.RowIndex +
1].Cells[1].Selected = true;

dgDatos.CurrentCell = dgDatos.Rows[dgDatos.CurrentCell.RowIndex
+ 1].Cells[1];

form2 frm = new form2 (Articulo);

frm.ShowDialog();

}

}





Hola, Sofia:

¿No tienes otro sitio mejor para mostrar el formulario Form2 que no sea el
evento Activate de Form1? Piensa que cada vez que se active el formulario
Form1, se va a mostrar el formulario Form2. Es decir, cada vez que se cierre
Form2, se desencadenará el evento Activate de Form1, y nuevamente se
mostrará el formulario Form2, y así sucesivamente, por lo que no me extraña
que recibas la excepción que nos estás comentando (Error al crear
identificador de ventana), que puede ser a las 35 veces o las de 10 veces,
que es lo que me ha ocurrido a mí.

Intenta ejecutar el código anterior en otro lugar distinto al evento
Activate del formulario Form1.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#2 Alberto Poblacion
29/03/2010 - 15:56 | Informe spam
"Sofia" wrote in message
news:
Tengo una aplicación windows en C# y me da un error un poco raro.
form1.frmSender = "SIGUIENTE";
[...]
this.Dispose();
this.Close();



Veo aquí algo raro. No deberías hacer un Dispose dentro del propio
objeto que contiene este método, y mucho menos llamar a alguno de sus
métodos (en este caso el Close) después de haber hecho un Dispose.

En lugar de eso, te sugiero rehacer el código llamante. En lugar de
emplear el Activate del Form1 para pasar a la siguiente instancia del Form2,
utiliza el click de algún botón para abrirlo la primera vez. Para los
sucesivos registros, aprovechando que el formulario que muestras es modal,
pasa al siguiente registro cuando te lo cierren. Esto además te permite
hacer el Dispose desde el código llamante.

form2 frm = new form2 (Articulo);
frm.ShowDialog();
frm.Dispose();
if (frmSender=="SIGUIENTE")
{
//Pasar al siguiente
}
Respuesta Responder a este mensaje
#3 Sofia
29/03/2010 - 16:14 | Informe spam
Muchísimas gracias Alberto, asi me funciona perfectamente!!!


"Alberto Poblacion"
escribió en el mensaje news:ej8q%
"Sofia" wrote in message
news:
Tengo una aplicación windows en C# y me da un error un poco raro.
form1.frmSender = "SIGUIENTE";
[...]
this.Dispose();
this.Close();



Veo aquí algo raro. No deberías hacer un Dispose dentro del propio
objeto que contiene este método, y mucho menos llamar a alguno de sus
métodos (en este caso el Close) después de haber hecho un Dispose.

En lugar de eso, te sugiero rehacer el código llamante. En lugar de
emplear el Activate del Form1 para pasar a la siguiente instancia del
Form2, utiliza el click de algún botón para abrirlo la primera vez. Para
los sucesivos registros, aprovechando que el formulario que muestras es
modal, pasa al siguiente registro cuando te lo cierren. Esto además te
permite hacer el Dispose desde el código llamante.

form2 frm = new form2 (Articulo);
frm.ShowDialog();
frm.Dispose();
if (frmSender=="SIGUIENTE")
{
//Pasar al siguiente
}

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida