La aplicación termina súbitamente

02/08/2005 - 23:43 por RFOG | Informe spam
Hola.

Tengo el código de abajo en el evento SelectedIndexChanged de un listbox
para cambiar varias cosas de la propia ficha.

private void m_lbTileSets_SelectedIndexChanged(object sender,
System.EventArgs e)
{
m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;

m_ckbAnimateDropping.Checked=m_cfgMgr.AnimateDrop;
m_ckbAnimateSelection.Checked=m_cfgMgr.AnimateSelection;
m_ckbExplode.Checked=m_cfgMgr.Explode;
m_ckbDrawGrid.Checked=m_cfgMgr.DrawGrid;

m_nudNumBalls.Maximum=m_cfgMgr.CurrentTileSet.NumTiles;
m_nudNumBalls.Value=m_cfgMgr.NumTiles;

m_nudVertSize.Value=m_cfgMgr.NumVertTiles;
m_nudHorizSize.Value=m_cfgMgr.NumHorzTiles;

m_cbGameType.SelectedIndex=(int)m_cfgMgr.GameType;
m_ckbContinuous.Checked=m_cfgMgr.Continuous;

m_pbImage.Image=Image.FromFile(m_cfgMgr.CurrentTileSet.ImageFile);
}

La línea

m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;

hace que la clase m_cfgMgr cargue un fichero de disco con varios datos.
Todo lo demás hasta la última línea es típico y no necesita descripción.

Lo curioso de todo es que siempre, a la tercera llamanda al método, la
aplicación termina sin mostrar nada de nada. Depurando, paso todas las
líneas del método hasta la última, y luego salta al código de terminación,
como si en la última línea se hubiera llamado a Application.Terminate();
 

Leer las respuestas

#1 Braulio Diez
03/08/2005 - 10:51 | Informe spam
Hola que hay,

Tiene pinta de que o no hay seleccion en la lista (o la lista esta vacia),
o el fichero que vas a leer esta abierto de forma exclusiva (igual no se
cierra), o que no existe.

Para capturar el error, pon un try y un catch, en el catch pon un
breakpoint y te saltara justo cuando falle la aplicación sacando un mensaje
de error (así puede ver que es lo que pasa), lo más genérico sería:

private void m_lbTileSets_SelectedIndexChanged(object sender,
System.EventArgs e)
{
try { m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;
}
catch(System.Exception ex)
{
// Breakpoint aquí
// pon cualquier instrucción tonta para poner el breakpoint
messageBox(ex.Description);
}
}

También en las opciones puedes decirle que te salte al debugger cuando se
produzca una excepción.

Dime si esto te ayuda, si no, seguimos con el diagnostico del "enfermo" a
ver si sacamos algo :-)

Un saludo
Braulio


/// --
/// Braulio Díez
/// Desarrollador C#
/// Málaga - España
// --


"RFOG" escribió:

Hola.

Tengo el código de abajo en el evento SelectedIndexChanged de un listbox
para cambiar varias cosas de la propia ficha.

private void m_lbTileSets_SelectedIndexChanged(object sender,
System.EventArgs e)
{
m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;

m_ckbAnimateDropping.Checked=m_cfgMgr.AnimateDrop;
m_ckbAnimateSelection.Checked=m_cfgMgr.AnimateSelection;
m_ckbExplode.Checked=m_cfgMgr.Explode;
m_ckbDrawGrid.Checked=m_cfgMgr.DrawGrid;

m_nudNumBalls.Maximum=m_cfgMgr.CurrentTileSet.NumTiles;
m_nudNumBalls.Value=m_cfgMgr.NumTiles;

m_nudVertSize.Value=m_cfgMgr.NumVertTiles;
m_nudHorizSize.Value=m_cfgMgr.NumHorzTiles;

m_cbGameType.SelectedIndex=(int)m_cfgMgr.GameType;
m_ckbContinuous.Checked=m_cfgMgr.Continuous;

m_pbImage.Image=Image.FromFile(m_cfgMgr.CurrentTileSet.ImageFile);
}

La línea

m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;

hace que la clase m_cfgMgr cargue un fichero de disco con varios datos.
Todo lo demás hasta la última línea es típico y no necesita descripción.

Lo curioso de todo es que siempre, a la tercera llamanda al método, la
aplicación termina sin mostrar nada de nada. Depurando, paso todas las
líneas del método hasta la última, y luego salta al código de terminación,
como si en la última línea se hubiera llamado a Application.Terminate();

Preguntas similares