none
Cambiar el color de fondo de un label repetitivas veces RRS feed

  • Pregunta

  • Hola a todos!

    Estoy haciendo un contador con forms que llega a un determinado tiempo (5 segundos),uso un boton 'iniciar',un label-hora donde represento la salida del timer , quiero hacer parpadear el fondo del label cambiando de blanco a rojo, blanco-rojo. (como si fuera tipo semaforo). Mi duda es que no logro ver ese cambio de color a menos que dentro de la validacion del if ponga un mensaje de salida, ya intenté con Thread.Sleep() para que se espere segundos en cambiar y tampoco hace nada. Alguna idea de como hacerlo, todo lo demas funciona bien e incluso hasta cuando se detiene el timer. Este es el codigo

     private void timer1_Tick(object sender, EventArgs e)
            {
                if (ini != DateTime.MinValue)
                {
                    TimeSpan elapsed = DateTime.Now - ini;
                    lblhora.Text = elapsed.ToString(@"mm\:ss");
    
                    if (lblhora.Text == "00:05")
                    {
                        timer1.Stop();
                        
                        Boolean activo = true;
    
                        for (int i = 0; i<= 5; i++){
                            if (activo)
                            {
                                lblhora.BackColor = Color.Red;
                                activo = false;
                                MessageBox.Show("Color rojo");
                            }
                            else
                            {
                                lblhora.BackColor = Color.White;
                                activo = true;
                                MessageBox.Show("Color blanco");
                            }
    
                        }
    
                       
                    }
                    
                }
            }


    jueves, 20 de junio de 2019 19:57

Todas las respuestas

  • Hola Aventura01

    Como se observa en  public static void Sleep (int millisecondsTimeout);

    https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread.sleep?view=netframework-4.8

    Necesitas ingresar la cantidad de milisegundos que deseas que se congele el hilo de ejecución principal y este método sólo funcionaria en el main(), en otro método tienes que generar un hilo por separado o detectar el Id de thread con el que se esta ejecutando dicho método para poder mandar la instrucción de pausar ese thread, entonces tendrías que usar la clase Thread();

    Gracias por usar los foros de MSDN.
    Erick Rivera
     ____
    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 
    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    viernes, 5 de julio de 2019 15:22
  • Hola intenta con esto

    el timer tiene el interval =1000

     int i = 0;
     private void timer1_Tick(object sender, EventArgs e)
     {
         i++;
         label1.Text = DateTime.Now.ToLongTimeString();     
         if (i==5)
         {
             label1.BackColor = (label1.BackColor== Color.White) ? Color.Red : Color.White;
             i = 0;
         }
     }
    es solo para el fondo y que aparesca la hora


    • Editado Marti Llam domingo, 7 de julio de 2019 4:05
    domingo, 7 de julio de 2019 1:00