• Miércoles 20 de Noviembre de 2024, 18:46

Autor Tema:  Cómo Esperar A La Terminacion De Un Formulario  (Leído 1718 veces)

superbob

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Cómo Esperar A La Terminacion De Un Formulario
« en: Martes 8 de Enero de 2008, 10:40 »
0
Hola gente, estoy haciendo una aplicación en C# (Visual Studio) y tengo un problema que no acabo de resolver.

Resulta que tengo un listview con filas cargadas con los elementos de un ArrayList y llamo a un método que me crea un formulario que puede eliminarme ciertos componentes del ArrayList.

Yo quiero que al eliminar un componente de ese ArrayList, me quede reflejado al volver al formulario principal, donde está el Listview, pero sin esa componente.

El caso es que he puesto el código para vaciar ese listview y volver a cargarlo despues de hacer el ".Show()" pero al ser más rápido el vaciarListview() y el cargarListview() que la creación del formulario pues no le da tiempo a ejecutar el formulario y me deja el ArrayList sin modificar y la listview es vaciada y rellenada de nuevo con el mismo ArrayList que tenía antes.

Esto es lo que quiero decir:

Código: Text
  1. private void excursionesToolStripMenuItem_Click(object sender, EventArgs e)
  2.         {
  3.             FgestionExcursion fExc = new FgestionExcursion(ref excursiones);
  4.             fExc.Show();
  5.             //las siguientes lineas no hacen nada porque se ejecutan antes de iniciar la ventana
  6.             vaciarListViewExcursiones();
  7.             cargarListViewExcursiones(excursiones);
  8.         }
  9.  

¿Hay alguna otra forma de hacerlo? He probado a crear esos dos métodos como estáticos y llamarlos desde FgestionExcursion, pero no funciona porque me da problemas con las variables del listview.

Espero que podais echarme una mano para solucionar este problema

Gracias.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cómo Esperar A La Terminacion De Un Formulario
« Respuesta #1 en: Martes 8 de Enero de 2008, 13:53 »
0
dos opciones...

1 - no la he probado

prueba con esto justo antes de llamar a vaciarListViewExcursiones();

Código: Text
  1.  
  2. FgestionExcursion fExc = new FgestionExcursion(ref excursiones);
  3. fExc.Show();
  4. while (!fExc.Visible)&#59;
  5. vaciarListViewExcursiones();
  6. ...
  7.  
  8.  

2 - más elegante:

Código: Text
  1. bool b = false;
  2. FgestionExcursion fExc = new FgestionExcursion(ref excursiones);
  3. myF.Load += delegate { cargado = true; };
  4. fExc.Show();
  5. while (!cargado)&#59;
  6. vaciarListViewExcursiones();
  7.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

superbob

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Cómo Esperar A La Terminacion De Un Formulario
« Respuesta #2 en: Martes 8 de Enero de 2008, 18:53 »
0
La primera opción no funciona porque se queda colgado en el bucle.

La segunda francamente no la entiendo, no es que sea yo un programador muy avanzado xD

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cómo Esperar A La Terminacion De Un Formulario
« Respuesta #3 en: Martes 8 de Enero de 2008, 19:17 »
0
si te funciona me avisas y te explico mas profundamente.

en resumen lo que hago es decirle que después del evento load le cambie el valor a la variable cargado así que luego hago un bucle de espera hasta que la variable cargado cambie de valor. Se puede optimizar más para hacerlo mas eficiente , al igual que la primera opción que te di la cual al parecer funciona haciendole un pequeño ajuste.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

superbob

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Cómo Esperar A La Terminacion De Un Formulario
« Respuesta #4 en: Martes 8 de Enero de 2008, 21:43 »
0
Pero en la segunda opción, qué es: MyF.Load?? De qué forma se modifica el "Cargado"?

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cómo Esperar A La Terminacion De Un Formulario
« Respuesta #5 en: Martes 8 de Enero de 2008, 21:56 »
0
error mio, corregido,

Código: Text
  1. bool b = false;
  2. FgestionExcursion fExc = new FgestionExcursion(ref excursiones);
  3. fExc .Load += delegate { cargado = true; };
  4. fExc.Show();
  5. while (!cargado);
  6. vaciarListViewExcursiones();
  7.  

el cargado es modificado dentro de un delegate, solo se ejecutara esa linea al final del evento load de la forma.

Si necesitas mas explicacion me avisas, pero puedes buscar en internet mientras tanto.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

superbob

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Cómo Esperar A La Terminacion De Un Formulario
« Respuesta #6 en: Miércoles 9 de Enero de 2008, 01:50 »
0
En internet había buscado mucha información acerca del OnClosing, pero al final lo he solucionado de una forma mucho más sencilla... tan simple que parezco tonto.

En lugar de hacer un .Show() he hecho un .ShowDialog() y ya está arreglado.

De todos modos muchisimas gracias por tu interés, gracias a gente como tu los principiantes como yo podemos progresar pues no siempre google te da todo lo que buscas.

Gracias de nuevo y hasta otra :)