Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Zeroql en 26 Agosto 2010, 18:06 pm



Título: Llamar a un form y poner en espera la funcion que lo llamo... (Resuelto)
Publicado por: Zeroql en 26 Agosto 2010, 18:06 pm
Buenas. pues es simplemente lo que dice el titulo
resulta que tengo una funcion para guardado de datos, pero necesito llamar un form que me muestre otros datos para seleccionarlos. el punto es que los form son form hijos asi que no se puede usar el showdialog.

como puedo llamar al form y hacer k la operacion de la funcion se pause hasta que el form se descarge???

De ante mano muchas gracias.


Título: Re: Llamar a un form y poner en espera la funcion que lo llamo...
Publicado por: [D4N93R] en 26 Agosto 2010, 18:36 pm
No puedes usar ShowDialog? Pues puedes hacer que el form (en donde pides los otros datos para seleccionar) no sea hijo del otro, sino que sea Modal,llamando SHowDialog, y ya,.. debería ser la vía,  a menos de que no haya entendido tu pregunta :)

De todos modos si quieres detener la ejecución hasta que pase algo, puede usar AutoResetEvent. Saludos!


Título: Re: Llamar a un form y poner en espera la funcion que lo llamo...
Publicado por: Zeroql en 27 Agosto 2010, 03:28 am
No puedo usar showdialog, por que el form tambien hace parte de un mdiparent, y me tira error al llamaro con showdialog.
autoResetEven, no me sirve, avanza normalmente la funcion que llama al form.
alguien tiene otra idea?


Título: Re: Llamar a un form y poner en espera la funcion que lo llamo...
Publicado por: seba123neo en 27 Agosto 2010, 03:47 am
Hola, proba esto en un boton del form padre....

Código
  1.        Dim vFormHijo As New FormHijo
  2.        vFormHijo.MdiParent = Me.MdiParent
  3.        vFormHijo.ShowDialog()
  4.  
  5.        MsgBox("Cerraste el form")

saludos.


Título: Re: Llamar a un form y poner en espera la funcion que lo llamo...
Publicado por: 43H4FH44H45H4CH49H56H45H en 27 Agosto 2010, 11:56 am
No puedo usar showdialog, por que el form tambien hace parte de un mdiparent, y me tira error al llamaro con showdialog.
autoResetEven, no me sirve, avanza normalmente la funcion que llama al form.
alguien tiene otra idea?

Puedes declarar variables bool por ejemplo:

Código
  1. public bool form2Cerrado = false;
Código
  1. private void Form2_FormClosed(object sender, FormClosedEventArgs e)
  2. {
  3.     form2Cerrado = true;
  4. }

Y utilizas el primer formulario para saber si esta cerrado o no, luego de cerrarse el form2 envias el valor de una variable (puede ser bool) al formulario que necesitaba esperar a que se cierre en "form2" para que continue su trabajo.

Es una forma "cutre" de hacerlo pero se ajusta a lo que pides, por otro lado deberias revisar (replantear) el diseño de tu programa, no deberias necesitar utilizar los form de esa manera.


Título: Re: Llamar a un form y poner en espera la funcion que lo llamo...
Publicado por: Zeroql en 27 Agosto 2010, 16:08 pm
seba123neo ya intente tu propuesta y tira el siguiente error

Un formulario que no es de nivel superior no se puede mostrar como un cuadro de diálogo modal. Quite el formulario de los formularios primarios que lo contengan antes de llamar a showDialog.

43H4FH44H45H4CH49H5 ti digo que eso de la varible es interesante, pero como la controlo en la funcion???

heee resulta kelo llamo en modal por la razon de que la funcion que lo llama es de datos y el form es para agregar nuevos datos, cuando devuelve el control a la funcion debe recargar la lista de datos con el agregado por el form. por eso ese diseño


Título: Re: Llamar a un form y poner en espera la funcion que lo llamo...
Publicado por: 43H4FH44H45H4CH49H56H45H en 27 Agosto 2010, 18:34 pm
Bueno de pasada, mira este code:
Form1

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace Ventanas
  11. {
  12.    public partial class Form1 : Form
  13.    {
  14.        Form2 f2 = new Form2();
  15.        Form3 f3 = new Form3();
  16.        public Form1()
  17.        {
  18.            InitializeComponent();
  19.        }
  20.  
  21.        private void button1_Click(object sender, EventArgs e)
  22.        {
  23.            f2.Show();
  24.            f3.Show();
  25.            timer1.Start();
  26.        }
  27.  
  28.        private void timer1_Tick(object sender, EventArgs e)
  29.        {
  30.            if (f2.form2Closed)
  31.            {
  32.                timer1.Stop();
  33.                f3.setText("Form2 Closed");
  34.                f2.form2Closed = false;
  35.            }
  36.        }
  37.    }
  38. }
  39.  

Form2

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace Ventanas
  11. {
  12.    public partial class Form2 : Form
  13.    {
  14.        public bool form2Closed = false;
  15.        public Form2()
  16.        {
  17.            InitializeComponent();
  18.        }
  19.  
  20.        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
  21.        {
  22.            form2Closed = true;
  23.        }
  24.    }
  25. }
  26.  

Form3

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace Ventanas
  11. {
  12.    public partial class Form3 : Form
  13.    {
  14.        public Form3()
  15.        {
  16.            InitializeComponent();
  17.        }
  18.        public void setText(string value)
  19.        {
  20.            label1.Text = value;
  21.        }
  22.    }
  23. }
  24.  

Simplemente en el form1  hay un button que muestra el form2 y el form3 cuando se cierra el form2 se accede desde el form1 a setText(string value) del form3 y cambiamos el contenido del label1 (no cambie directamente el contenido del label para mostrar como hacerlo en otro caso).

Ahora puedes hacer algo similar para pausar una tarea u otra cosa.
Eso ya depende de lo que hagas, lo del timer puede suprimirse pero creo que es lo mas sencillo de hacer.


Título: Re: Llamar a un form y poner en espera la funcion que lo llamo...
Publicado por: Zeroql en 27 Agosto 2010, 21:00 pm
Muchas gracias por el code 43H4FH44H45H4CH49H5
pero solucione todo de una forma mas facil.
usando una variable global que cuando se llame form este es true, y al cerrar le form este comprueba si es true, si es asi, que recarge lo que necesito....
igual a todos muchas gracias por su tiempo, y dedicacion, espermos que a alguien que tambien necesite lo mismo le puedan servir los codes y ayudas propuestos., igual tambien me puede servir en otro programa que tengo empezado el code...


Título: Re: Llamar a un form y poner en espera la funcion que lo llamo... (Resuelto)
Publicado por: seba123neo en 28 Agosto 2010, 06:11 am
perdona no me di cuenta que lo abre fuera del padre...