elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  No refresca la barra al volver a 0.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No refresca la barra al volver a 0.  (Leído 2,436 veces)
Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
No refresca la barra al volver a 0.
« en: 29 Mayo 2016, 09:44 am »

Hola:

Antes cuando mostraba los datos la pantalla de modo consola en C# parpadeada porque ponía el Console.Clear();

Ahora uso las coordenadas donde supuestamente deben de parpadear cuando cambia el valor.

Lo que le ocurre y quiero solucionar. Recibo datos de 0 a 1023, en el cual muestra la barra de progreso, cuando aumento de valor, la barra de progreso escrito en modo consola, aunmenta.

Si bajo el valor, la barra de progreso no baja, se queda donde alcanzó su valor máximo.

Quiero saber la forma de solucionarlo. Aquí abajo dejo el código.

Código
  1. using System;
  2. using System.IO.Ports; // No olvidar.
  3. using System.IO;
  4.  
  5. namespace Porcentaje_Barra_P_Serie_Consola_3_CS
  6. {
  7.    class Program
  8.    {
  9.        public static string Recibidos = "";
  10.        public static double Resultado_Porcentaje = 0;
  11.        public static double Resultado_Voltios = 0;
  12.        public static double Mitad_barra = 0;
  13.  
  14.  
  15.        static void Main(string[] args)
  16.        {
  17.            string COM = "";
  18.  
  19.            // Tamaño ventana consola.
  20.            Console.WindowWidth = 55; // X.
  21.            Console.WindowHeight = 15; // Y.
  22.            Console.Title = "Serial Port C# - v.02"; // Título de la ventana.
  23.  
  24.            SerialPort Puerto_serie;
  25.  
  26.            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
  27.            Puerto_serie = new SerialPort();
  28.  
  29.            // Configuración.
  30.            Console.Write(@"
  31. Introduzca un número para seleccionar puerto COM.
  32. Por ejemplo el 4, sería COM4.
  33.  
  34. Puerto: ");
  35.            COM = Console.ReadLine(); // Escribir el número del puerto.
  36.            Console.Clear();
  37.  
  38.            Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.
  39.  
  40.  
  41.            Puerto_serie.BaudRate = 115200; // Baudios.
  42.            Puerto_serie.Parity = Parity.None; // Paridad.
  43.            Puerto_serie.DataBits = 8; // Bits de datos.
  44.            Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
  45.            Puerto_serie.Handshake = Handshake.None; // Control de flujo.
  46.  
  47.            // Establecer la lectura / escritura de los tiempos de espera.
  48.            Puerto_serie.ReadTimeout = 500;
  49.            Puerto_serie.WriteTimeout = 500;
  50.  
  51.            try
  52.            {
  53.                Puerto_serie.Open(); // Abrir el puerto serie.
  54.            }
  55.  
  56.            catch (IOException)
  57.            {
  58.                Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
  59.                Console.CursorVisible = false;
  60.                Console.SetCursorPosition(16, 6);
  61.                Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
  62.                o no lo encuentra.");
  63.            }
  64.  
  65.            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
  66.  
  67.            Console.Read();
  68.            Puerto_serie.Close(); // Cerrar puerto.
  69.        }
  70.  
  71.        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
  72.  
  73.        {
  74.  
  75.            try
  76.            {
  77.                SerialPort sp = (SerialPort)sender;
  78.                Recibidos = sp.ReadExisting();
  79.                //Console.Clear();
  80.  
  81.                Recibidos = Recibidos.Replace("\n\r", "");
  82.  
  83.                int Variar_este_valor = Convert.ToInt32(Recibidos);
  84.  
  85.                Resultado_Porcentaje = Variar_este_valor * (100.00 / 1023.00);
  86.                Resultado_Voltios = Variar_este_valor * (5.00 / 1023.00);
  87.  
  88.  
  89.                Console.SetCursorPosition(0, 1);
  90.                Console.Write("Datos recibidos: ");
  91.                Console.SetCursorPosition(17, 1);
  92.                Console.Write("    ");
  93.                Console.SetCursorPosition(17, 1);
  94.                Console.Write(Recibidos);
  95.  
  96.  
  97.                Console.SetCursorPosition(0, 3);
  98.                Console.Write("0 %                     50 %                   100 %");
  99.                Console.SetCursorPosition(0, 4);
  100.                Console.Write("┌────────────────────────┬───────────────────────┐");
  101.                Console.Write("                                                  ");
  102.                Console.ForegroundColor = ConsoleColor.Yellow;
  103.  
  104.                // Se dibide por dos la barra del porcentaje para que quepa decuadamente en la pantalla.
  105.                Mitad_barra = Resultado_Porcentaje / 2;
  106.  
  107.                if (Mitad_barra > 50)
  108.                {
  109.                    Mitad_barra = 50;
  110.                }
  111.  
  112.                Console.SetCursorPosition(0, 5);
  113.                // Barra de progreso.
  114.                for (int i = 1; i <= Mitad_barra; i++)
  115.                {
  116.                    Console.Write("&#9608;"); // Muestra ASCII 219 Dec y DB en Hex.
  117.                }
  118.                //Console.SetCursorPosition(0, 5);
  119.                //Console.Write("                                                  ");
  120.                Console.SetCursorPosition(0, 5);
  121.                Console.Write("--------------------------------------------------");
  122.  
  123.                // Si sobre pasa 100, muestra # al final de la barra del porcentaje de color rojo.
  124.                if (Resultado_Porcentaje >= 100)
  125.                {
  126.                    Console.ForegroundColor = ConsoleColor.Red;
  127.                    Console.Write("#");
  128.                }
  129.  
  130.                Console.ForegroundColor = ConsoleColor.Gray; // Vuelve al color gris.
  131.  
  132.                // Línea 7.
  133.                Console.SetCursorPosition(0, 7);
  134.                Console.Write("Porcentaje: ");
  135.                Console.SetCursorPosition(12, 7);
  136.                Console.Write("            ");
  137.                Console.SetCursorPosition(12, 7);
  138.                Console.Write(Resultado_Porcentaje.ToString("N0") + " %.");
  139.  
  140.                // Línea 8.
  141.                Console.SetCursorPosition(0, 8);
  142.                Console.Write("Voltios: ");
  143.                Console.SetCursorPosition(12, 8);
  144.                Console.Write("            ");
  145.                Console.SetCursorPosition(12, 8);
  146.                Console.Write(Resultado_Voltios.ToString("N2") + " V.");
  147.  
  148.            }
  149.  
  150.            catch (FormatException)
  151.            {
  152.                // Console.WriteLine("La cadena de entrada no tiene el formato correcto.");
  153.                return;
  154.            }
  155.        }
  156.    }
  157. }
  158.  
  159.  

Saludos.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: No refresca la barra al volver a 0.
« Respuesta #1 en: 29 Mayo 2016, 13:06 pm »

Si bajo el valor, la barra de progreso no baja, se queda donde alcanzó su valor máximo.

Que la "barra de progreso" no disminuya es sinónimo de que no estás eliminando los caracteres sobrantes.

Si tu imprimes esto:
----- (5)

Y vuelves a la posición inicial para escribir esto:
---- (4)

Al final lo que tienes es esto:
----- (4+1)

Asegúrate de limpiar la linea actual antes de escribir el nuevo "porcentaje" de la "barra de progreso".
Código
  1. public static void ClearCurrentConsoleLine()
  2. {
  3.    int currentLineCursor = Console.CursorTop;
  4.    Console.SetCursorPosition(0, Console.CursorTop);
  5.    Console.Write(new string(' ', Console.WindowWidth));
  6.    Console.SetCursorPosition(0, currentLineCursor);
  7. }

Saludos


En línea

Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: No refresca la barra al volver a 0.
« Respuesta #2 en: 30 Mayo 2016, 11:36 am »

Hola:

Ahora me funciona de maravilla como puedes ver el código de abajo.

Hay algo que me tiene loco, me salta la excepción llamada.

Código
  1. FormatException La cadena de entrada no tiene el formato correcto

Como verás en el código, le puse return; Así no me sale nada pero parpadea los números y la barra mucho. Solo falta eso, al menos no parpadea la pantalla completo como antes. Salta  a veces, no siempre.

Código
  1. using System;
  2. using System.IO.Ports; // No olvidar.
  3. using System.IO;
  4.  
  5. namespace Porcentaje_Barra_P_Serie_Consola_3_CS
  6. {
  7.    class Program
  8.    {
  9.        public static string Recibidos = "";
  10.        public static double Resultado_Porcentaje = 0;
  11.        public static double Resultado_Voltios = 0;
  12.        public static double Mitad_barra = 0;
  13.  
  14.  
  15.        static void Main(string[] args)
  16.        {
  17.            string COM = "";
  18.  
  19.            // Tamaño ventana consola.
  20.            Console.WindowWidth = 55; // X.
  21.            Console.WindowHeight = 15; // Y.
  22.            Console.Title = "Serial Port C# - v.02"; // Título de la ventana.
  23.  
  24.            SerialPort Puerto_serie;
  25.  
  26.            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
  27.            Puerto_serie = new SerialPort();
  28.  
  29.            // Configuración.
  30.            Console.Write(@"
  31. Introduzca un número para seleccionar puerto COM.
  32. Por ejemplo el 4, sería COM4.
  33.  
  34. Puerto: ");
  35.            COM = Console.ReadLine(); // Escribir el número del puerto.
  36.            Console.Clear();
  37.  
  38.            Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.
  39.  
  40.  
  41.            Puerto_serie.BaudRate = 115200; // Baudios.
  42.            Puerto_serie.Parity = Parity.None; // Paridad.
  43.            Puerto_serie.DataBits = 8; // Bits de datos.
  44.            Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
  45.            Puerto_serie.Handshake = Handshake.None; // Control de flujo.
  46.  
  47.            // Establecer la lectura / escritura de los tiempos de espera.
  48.            Puerto_serie.ReadTimeout = 500;
  49.            Puerto_serie.WriteTimeout = 500;
  50.  
  51.            try
  52.            {
  53.                Puerto_serie.Open(); // Abrir el puerto serie.
  54.            }
  55.  
  56.            catch (IOException)
  57.            {
  58.                Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
  59.                Console.CursorVisible = false;
  60.                Console.SetCursorPosition(16, 6);
  61.                Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
  62.                o no lo encuentra.");
  63.            }
  64.  
  65.            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
  66.  
  67.            Console.Read();
  68.            Puerto_serie.Close(); // Cerrar puerto.
  69.        }
  70.  
  71.        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
  72.  
  73.        {
  74.  
  75.            try
  76.            {
  77.                SerialPort sp = (SerialPort)sender;
  78.                Recibidos = sp.ReadExisting();
  79.                //Console.Clear();
  80.  
  81.                Recibidos = Recibidos.Replace("\n\r", "");
  82.  
  83.                int Variar_este_valor = Convert.ToInt32(Recibidos);
  84.  
  85.                Resultado_Porcentaje = Variar_este_valor * (100.00 / 1023.00);
  86.                Resultado_Voltios = Variar_este_valor * (5.00 / 1023.00);
  87.  
  88.  
  89.                Console.SetCursorPosition(0, 1);
  90.                Console.Write("Datos recibidos: ");
  91.                Console.SetCursorPosition(17, 1);
  92.                Console.Write("    ");
  93.                Console.SetCursorPosition(17, 1);
  94.                Console.Write(Recibidos);
  95.  
  96.  
  97.                Console.SetCursorPosition(0, 3);
  98.                Console.Write("0 %                     50 %                   100 %");
  99.                Console.SetCursorPosition(0, 4);
  100.                Console.Write("&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;");
  101.                Console.Write("                                                  ");
  102.                Console.ForegroundColor = ConsoleColor.Yellow;
  103.  
  104.                // Se dibide por dos la barra del porcentaje para que quepa decuadamente en la pantalla.
  105.                Mitad_barra = Resultado_Porcentaje / 2;
  106.  
  107.                if (Mitad_barra > 50)
  108.                {
  109.                    Mitad_barra = 50;
  110.                }
  111.  
  112.                // Console.SetCursorPosition(0, 5);
  113.                ClearCurrentConsoleLine();
  114.                // Barra de progreso.
  115.                for (int i = 1; i <= Mitad_barra; i++)
  116.                {
  117.                    Console.Write("&#9608;"); // Muestra ASCII 219 Dec y DB en Hex.
  118.                }
  119.  
  120.                // Si sobre pasa 100, muestra # al final de la barra del porcentaje de color rojo.
  121.                if (Resultado_Porcentaje >= 100)
  122.                {
  123.                    Console.SetCursorPosition(50, 5);
  124.                    Console.ForegroundColor = ConsoleColor.Red;
  125.                    Console.Write("#");
  126.                }
  127.  
  128.                Console.ForegroundColor = ConsoleColor.Gray; // Vuelve al color gris.
  129.  
  130.                // Línea 7.
  131.                Console.SetCursorPosition(0, 7);
  132.                Console.Write("Porcentaje: ");
  133.                Console.SetCursorPosition(12, 7);
  134.                Console.Write("            ");
  135.                Console.SetCursorPosition(12, 7);
  136.                Console.Write(Resultado_Porcentaje.ToString("N0") + " %.");
  137.  
  138.                // Línea 8.
  139.                Console.SetCursorPosition(0, 8);
  140.                Console.Write("Voltios: ");
  141.                Console.SetCursorPosition(12, 8);
  142.                Console.Write("            ");
  143.                Console.SetCursorPosition(12, 8);
  144.                Console.Write(Resultado_Voltios.ToString("N2") + " V.");
  145.  
  146.            }
  147.  
  148.            catch (FormatException)
  149.            {
  150.                // Console.WriteLine("La cadena de entrada no tiene el formato correcto.");
  151.                return;
  152.            }
  153.  
  154.        }
  155.  
  156.        public static void ClearCurrentConsoleLine()
  157.        {
  158.            int currentLineCursor = Console.CursorTop;
  159.            Console.SetCursorPosition(0, Console.CursorTop);
  160.            Console.Write(new string(' ', Console.WindowWidth));
  161.            Console.SetCursorPosition(0, currentLineCursor);
  162.        }
  163.    }
  164. }
  165.  
  166.  

Es un pequeño problema que quiero solventar.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No refresca un componente treeview y no puedo ver bien el contenido
.NET (C#, VB.NET, ASP)
murdock_ 0 2,295 Último mensaje 30 Enero 2010, 13:56 pm
por murdock_
Barra de Inicio y barra de tareas
Windows
herquiloz 4 4,581 Último mensaje 5 Diciembre 2010, 15:36 pm
por Randomize
Problema con frame que se resetea! o refresca!
Desarrollo Web
CWeeD 1 2,250 Último mensaje 9 Junio 2016, 21:28 pm
por DiegoAZL
[Help] Saber cuando se refresca un control
Programación Visual Basic
Psyke1 2 2,167 Último mensaje 13 Marzo 2011, 11:03 am
por Psyke1
Volver?
Foro Libre
NorteaComputer 8 3,326 Último mensaje 28 Julio 2012, 16:11 pm
por Spider-Net
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines