none
CERRAR FORMULARIO CON TIEMPO RRS feed

  • Pregunta

  • Holaaa ^^. necesito saber como puedo cerrar mi formulario en un tiempo determinado, como asi?

    tengo lo que es un formulario con un button y un label , al momento de hacer click al button le asigno al label un tiempo que va disminuyendo (pongalenle 120 segundos) y al momento que llegue a 0(cero) se cierre mi formulario :D

    Graciass ^^


    ========================================================== Samir Eduardo A.A ==========================================================
    viernes, 14 de octubre de 2011 18:50

Respuestas

  • Hola Samir,

    Pero si el ejemplo de Leandro hace exactamente eso, lo único que puede faltar es quiza hacer Label1.Refresch().

    Mira esto que a mí me gusta las innovaciones del c#, pero es lo mismo que te ha mostrado Leandro sin el Refresch.

     

    int Contador = 120;
            public Form1()
            {
                InitializeComponent();
    
    
    
                this.label1.Text = Contador.ToString();
                this.timer1.Interval = 1000;
                this.timer1.Start();
                this.timer1.Tick += (o, e) =>
                    {
                        Contador--;                    
                        if (Contador == 0)
                        {
                            this.Close();
                        }
                        this.label1.Text = Contador.ToString();
                        this.label1.Refresh();
                    };
                
                
            }
    

     


    La verdad que le vas a meter estrés a los usuarios :)

    Saludos,


    phurtado
    viernes, 14 de octubre de 2011 19:19
    Moderador

Todas las respuestas

  • podrias usar un control Timer

    cuando se presiona el boton pones el timer en Start()

    en el evento Tick vas representando la resta del contador y lo muestras

    cuando se cumple el cero hacer el Close() del form

    int contador = 120;
    
    private button1_Click(..){

    Timer1.Interval = 1000;
    Timer1.Start(); } private void Timer1_Tick(...){ Timer1.Stop(); lblContador.Text = Convert.ToString(contador); contador--; if(contador ==0) this.Close(); Timer1.Start(); }


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 14 de octubre de 2011 18:56
  • Hola,

    Prueba este código.

    Para ello tienes que agregar un Timmer.

    public Form1()
            {
                InitializeComponent();
    
               
                
                this.timer1.Interval = 1000;
                this.timer1.Start();
                this.timer1.Tick+=(o,e)=>
                    {
                        this.Close();
                    };
                
            }
    


    Una cosa a tener en cuenta yo he colocado 1000 para comprobar que se cierra lo que tu tienes que hacer es sustituir 

    this.timer1.Interval =1000 por this.timer1.Interval = 1200000 que serían los 120 segundos expresados en milisegundos.

    Saludos,


    phurtado
    viernes, 14 de octubre de 2011 18:58
    Moderador
  • Hola Samir,

    Si lo que tu estás haciendo es disminuyendo el tiempo del Label manualmente puedes hacer lo siguiente.

    this.label1.TextChanged += (o, e) =>
                    {
                        if (this.label1.Text == "0")
                        {
                            this.Close();
                        }
                    };
    

    Saludos,


    phurtado
    viernes, 14 de octubre de 2011 19:02
    Moderador
  • Leandro, creo q no me deje entender;

    cuando yo clikeo al button  automaticamente me debe de restar el tiempo en este caso el contador q le has asignado :/

    Gracias!

     


    ========================================================== Samir Eduardo A.A ==========================================================
    viernes, 14 de octubre de 2011 19:15
  • Hola Pedro!,

    Gracias gracias!, el conveniente esque como hago para q el tiempo que le he asignado me muestre en el label?


    ========================================================== Samir Eduardo A.A ==========================================================
    viernes, 14 de octubre de 2011 19:16
  • Hola Samir,

    Pero si el ejemplo de Leandro hace exactamente eso, lo único que puede faltar es quiza hacer Label1.Refresch().

    Mira esto que a mí me gusta las innovaciones del c#, pero es lo mismo que te ha mostrado Leandro sin el Refresch.

     

    int Contador = 120;
            public Form1()
            {
                InitializeComponent();
    
    
    
                this.label1.Text = Contador.ToString();
                this.timer1.Interval = 1000;
                this.timer1.Start();
                this.timer1.Tick += (o, e) =>
                    {
                        Contador--;                    
                        if (Contador == 0)
                        {
                            this.Close();
                        }
                        this.label1.Text = Contador.ToString();
                        this.label1.Refresh();
                    };
                
                
            }
    

     


    La verdad que le vas a meter estrés a los usuarios :)

    Saludos,


    phurtado
    viernes, 14 de octubre de 2011 19:19
    Moderador
  • Pedro

    estas seguro que no deberias detener el timer en cada evento ?

    digo porque podrias alcanzarse el cero y cuando este cerrando lanzarse otro evento en medio

     

    por eso en el ejmeplo que puse y cada vez que uso el timer tengo la precaucion de pararlo he inicirlo dentro del Tick

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 14 de octubre de 2011 19:23
  • GRACIASSSSSSSSS, LOS 2 SON BUENOS PROGRAMADORES EHHH!!

    ya tengo lo que queria, lo escribio Pedro ayudado del aporte de Leandro :

    int Contador = 120;
            public Form1()
            {
                InitializeComponent();
    
    
    
                this.label1.Text = Contador.ToString();
                this.timer1.Interval = 1000;
                this.timer1.Start();
                this.timer1.Tick += (o, e) =>
                    {
                        Contador--;                    
                        if (Contador == 0)
                        {
                            this.Close();
                        }
                        this.label1.Text = Contador.ToString();
                        this.label1.Refresh();
                    };
                
                
            }
    
    ^^ graciasss.. graciasss

    ========================================================== Samir Eduardo A.A ==========================================================
    viernes, 14 de octubre de 2011 19:26
  • Leandro

    Pués tienes razón, pero es que estas cosas me gustan poco :), porque por una parte haciendo stop falseas el tiempo y por otra sino lo pones puede ser que se ejecute algo de larga duración se cierre el formulario y provoque como bien apuntas algún error o yo que se, pero la verdad que creo que la mejor opción es ponerlo tal y como dices, puesto que lo que se hace en el evento tick falsea poco :).

    Creo que lo que tiene que hacer es hacer this.label1.Refresh(); Y solucionado :)

    Saludos,

     


    phurtado
    viernes, 14 de octubre de 2011 19:31
    Moderador
  • Hola

    es justo como te han comentado pedro y leandro, te dejo un ejemplo: (El mismo perro con diferente collar...):

            int count = 0;
            private void timer1_Tick(object sender, EventArgs e)
            {
                timer1.Enabled = false;
                textBox1.Text = (++count).ToString() + " seg";
                if (count==10)
                {                
                    Application.Exit();
                }
                timer1.Enabled = true;
            }
    
    el timer esta agregado en tiempo de diseño, con interval = 1000 o sea que a los 10 segundos... cierro la aplicación

    viernes, 14 de octubre de 2011 19:31
  • Hola Samir,

    Pues si te parece bien, lo que normalmente se debe de hacer es votar aquellas respuestas que son útiles a la comunidad, nada impide votar una o dos, aunque a Leandro otra cosa no pero puntos le sobran :).

    Una cosa Cruznick Application.Exit no es lo mismo que this.Close() aunque en el proyecto donde imagino has escrito el código si, puesto que solo tienes un Form y es el que arrancas con Application.Run, pero como bien has dicho es el mismo perro con diferente collar :).

    Pero hay una cosa que me hace daño a la vista y te digo cual (++count).ToString() + " seg";. Creo como buena practica deberías de hacer esto.

    count++;
    TextBoxt1.Text = string.Format("{0} seg", count);

    Saludos,



    phurtado
    viernes, 14 de octubre de 2011 19:42
    Moderador
  • Hola Pedro, si eso es lo bueno que existen personas que compartan sus conocimientos :D

    heyy! Cruznick gracias por tu aporte, lo probe pero no me salio xD; pero como dices es el mismo perro con diferente collar :) . asi q me quedo con el aporte de Pedro ayudado del aporte de Leandro jojojo, como suena no? , un gran equipo ^^.

     

    GRACIASSS a los 3 por brindarme su apoyo y tomarce un poco de su tiempo para responderme ^^


    Samir Eduardo A.A
    viernes, 14 de octubre de 2011 19:53
  • Hola Samir,

    Pues si te parece bien, lo que normalmente se debe de hacer es votar aquellas respuestas que son útiles a la comunidad, nada impide votar una o dos, aunque a Leandro otra cosa no pero puntos le sobran :).

    Una cosa Cruznick Application.Exit no es lo mismo que this.Close() aunque en el proyecto donde imagino has escrito el código si, puesto que solo tienes un Form y es el que arrancas con Application.Run, pero como bien has dicho es el mismo perro con diferente collar :).

    Pero hay una cosa que me hace daño a la vista y te digo cual (++count).ToString() + " seg";. Creo como buena practica deberías de hacer esto.

     

    count++;
    TextBoxt1.Text = string.Format("{0} seg", count);

    Saludos,


     


    phurtado
    Si pedro tienes razón, fue algo super rápido que hice para mostrarle.... pero validas las aclaraciones ;-) Saludos
    viernes, 14 de octubre de 2011 20:50