Llamar a un form y poner en espera la funcion que lo llamo... (Resuelto)

Iniciado por Zeroql, 26 Agosto 2010, 18:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Zeroql

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.
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


[D4N93R]

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!

Zeroql

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?
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


seba123neo

Hola, proba esto en un boton del form padre....

Código (vbnet) [Seleccionar]
        Dim vFormHijo As New FormHijo
        vFormHijo.MdiParent = Me.MdiParent
        vFormHijo.ShowDialog()

        MsgBox("Cerraste el form")


saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

43H4FH44H45H4CH49H56H45H

Cita de: 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?

Puedes declarar variables bool por ejemplo:

Código (csharp) [Seleccionar]
public bool form2Cerrado = false;
Código (csharp) [Seleccionar]
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
     form2Cerrado = true;
}


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.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

Zeroql

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
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


43H4FH44H45H4CH49H56H45H

Bueno de pasada, mira este code:
Form1

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ventanas
{
    public partial class Form1 : Form
    {
        Form2 f2 = new Form2();
        Form3 f3 = new Form3();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            f2.Show();
            f3.Show();
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (f2.form2Closed)
            {
                timer1.Stop();
                f3.setText("Form2 Closed");
                f2.form2Closed = false;
            }
        }
    }
}


Form2

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ventanas
{
    public partial class Form2 : Form
    {
        public bool form2Closed = false;
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            form2Closed = true;
        }
    }
}


Form3

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ventanas
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        public void setText(string value)
        {
            label1.Text = value;
        }
    }
}


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.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

Zeroql

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...
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


seba123neo

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson