|
372
|
Programación / .NET (C#, VB.NET, ASP) / Re: Timer en vez de Sleep.
|
en: 9 Febrero 2019, 17:12 pm
|
Muchas gracias mi muy distinguido amigo. using System; namespace Parpadeo_texto_consola_01_cs { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Blink"; // Tamaño ventana consola. // X anchura. Console.WindowWidth = 16; // Y altura. Console.WindowHeight = 2; // Oculto el cursor. Console.CursorVisible = false; // Como estamos en un ejemplo, da igual en este caso // poner un bucle infinito. Quiero que se muestre el // resultado. int t = 0; System.Timers.Timer blink = new System.Timers.Timer(100); blink.Enabled = true; bool mostrar = true; blink.Elapsed += (a, b) => { switch (t++) { case 0: mostrar = true; break; case 5: mostrar = false; break; case 6: t = -1; break; } // Posición de la pantalla. Console.SetCursorPosition(0, 0); // Mostrar texto en pantalla. Console.Write(mostrar ? "Hola mundo" : " "); }; Console.ReadKey(); } } }
No me gusta el código de arriba, mejor el que dices. Sigo con ello y me alegro el ejemplo del gif que pusiste.
|
|
|
373
|
Programación / .NET (C#, VB.NET, ASP) / Timer en vez de Sleep.
|
en: 9 Febrero 2019, 11:10 am
|
Hola: Quiero hacer un parpadeo de un texto en modo consola. Por ahora solo me sale con Sleep, pero no me gusta este. Aún así dejo un ejemplo de lo que quiero pero está hecho en Sleep. using System; using System.Threading; // No olvidar. namespace Parpadeo_texto_consola_01_cs { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Blink"; // Tamaño ventana consola. // X anchura. Console.WindowWidth = 16; // Y altura. Console.WindowHeight = 2; // Oculto el cursor. Console.CursorVisible = false; // Como estamos en un ejemplo, da igual en este caso // poner un bucle infinito. Quiero que se muestre el // resultado. while (true) { // Posición de la pantalla. Console.SetCursorPosition(0, 0); // Mostrar texto en pantalla. Console.Write("Hola mundo"); // Retardo de 0.5 segundos. 1000 ml (mili segundos) // es igual a 1 segundo. Thread.Sleep(500); // Posición de la pantalla. Console.SetCursorPosition(0, 0); // Mostrar espaciones en blanco para borrar texto anterior. Console.Write(" "); // Retardo 0.3 seg. Thread.Sleep(300); } } } }
Quiero hacer lo mismo, pero con el Timer en modo consola, lo que me cuesta hacerlo. Ya qu el timer pude interrumpir el programa cuando está dentro del temporizador pero con el Sleep, hasta que no acabe el tiempo, el programa se queda como en esclavo, sobre todo en tiempos muy largos. ¿Hay alguna forma de hacerlo en modo consola? Si se puede hacer el parpadeo en una función y lo llamo cuando quiera, mejor que mejor. Saludos.
|
|
|
374
|
Programación / .NET (C#, VB.NET, ASP) / Re: Menús en modo consola
|
en: 8 Febrero 2019, 20:47 pm
|
Hola: Sí, haz entedido bien, tamién es mejor la opción booleana. Lo saqué así al final. public static void radiazo() { ConsoleKey teclaRadio; Console.Clear(); do { Console.SetCursorPosition(0, 0); Console.Write("Ver radio: "); Console.SetCursorPosition(11, 0); Console.Write(radio ? "On " : "Off"); teclaRadio = Console.ReadKey(true).Key; if ((teclaRadio == ConsoleKey.UpArrow) || (teclaRadio == ConsoleKey.DownArrow)) { radio = !radio; } } while (teclaRadio != ConsoleKey.Enter); }
Si vez que ahora dice el On y Off si pulso todo el rato arriba o abajo ya puedo cambiar, tal como lo haz entendido. Si te fijas bien, el On y Off está fijo. Quiero que parpadee en cada 0.5 segundos, o lo que es lo mismo, 500 ms (mili segundos). Iba a usar Sleep, pero prefiero usar timer para que no se quede esclavo el programa aunque sea corto de tiempo. ¿Por qué quiero hacer esto así? Porque estoy practicando en modo consola usando el 16x2, aunque ahora mismo el 16x1. Cuando lo domine partes por partes lo que deseo, como el booleano, el XXXXXX-- del brillo, y me falta el volumen del 0 que es mute hasta aumentar el sonido hasta el 7. Poco a poco lo estoy haciendo. Cuando acabe con C#, adaptaré este código a un LCD real de 16x2 como puedes ver aquí. Quiero aprender hacer menús para LCD pero primero que acabo antes, en PC. Saludos.
|
|
|
375
|
Programación / .NET (C#, VB.NET, ASP) / Re: Menús en modo consola
|
en: 7 Febrero 2019, 21:39 pm
|
Buenas: Hoy me volví loco de la cabeza. Entrego código incompleto, lo entrego como curiosidad. Lo intentaré acabarlo al 100 %. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Menu_consola_09_cs { class Program { // Variables globales. public static int luz = 6; public const int BRILLO_MAX = 8; public static bool radio = false; static void Main(string[] args) { // Título de la ventana. Console.Title = "Menú de opciones"; // Tamaño ventana consola. // X anchura. Console.WindowWidth = 16; // Y altura. Console.WindowHeight = 2; // Oculto el cursor. Console.CursorVisible = false; ConsoleKey teclaInicial; Console.BackgroundColor = ConsoleColor.Green; // Letras negras. Console.ForegroundColor = ConsoleColor.Black; // Limpiar pantalla. do { Console.Clear(); Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy")); teclaInicial = Console.ReadKey(true).Key; if(teclaInicial == ConsoleKey.Enter) { menuPrincipal(); } } while (teclaInicial != ConsoleKey.Escape); // SANTIAGOOOOO. } public static void menuPrincipal() { // Contador de teclas y navegador. int opcion = 0; bool salir = false; // Capturar tecla para luego validar. ConsoleKey tecla; do { //****************************************************************** // Dibujo el menú. // Rellenar fondo verde. Console.BackgroundColor = ConsoleColor.Green; // Letras negras. Console.ForegroundColor = ConsoleColor.Black; // Limpiar pantalla. Console.Clear(); switch (opcion) { case 0: Console.SetCursorPosition(0, 0); Console.Write("Language"); break; case 1: Console.SetCursorPosition(0, 0); Console.WriteLine("Ajustar hora ->"); break; case 2: Console.SetCursorPosition(0, 0); Console.WriteLine("Ajustar fecha ->"); break; case 3: Console.SetCursorPosition(0, 0); Console.WriteLine("Brillo"); break; case 4: Console.SetCursorPosition(0, 0); Console.WriteLine("Ver radio"); break; case 5: Console.SetCursorPosition(0, 0); Console.WriteLine("Vol. avisos"); break; case 6: Console.SetCursorPosition(0, 0); Console.WriteLine("Vol. teclas"); break; case 7: Console.SetCursorPosition(0, 0); Console.WriteLine("Salir menú"); break; default: Console.WriteLine("Fuera de rango."); break; } // Fin de pintar el menú. //****************************************************************** // Leer tecla ingresada por el usuario. tecla = Console.ReadKey(true).Key; // Validar el tipo de tecla. if (tecla == ConsoleKey.Enter) { switch (opcion) { case 3: brillo(); break; case 4: radiazo(); break; case 7: salir = true; break; default: break; } } if (tecla == ConsoleKey.DownArrow) { opcion += 1; } if (tecla == ConsoleKey.UpArrow) { opcion -= 1; } // Si está en la última opción, salta a la primera. if (opcion > 7) { opcion = 0; } // Si está en la primera posición, salta a la última. if (opcion < 0) { opcion = 7; } // Uso la tecla escape como salida. } while (salir==false); } #region Brillo (3). public static void brillo() { ConsoleKey teclaBrillo; Console.Clear(); do { Console.SetCursorPosition(0, 0); Console.Write("Luz: "); for (int i = 0; i < luz; i++) { Console.Write("X"); } for (int j = 0; j < (BRILLO_MAX - luz); j++) { Console.Write("-"); } teclaBrillo = Console.ReadKey(true).Key; // ¿Se pulsó el cursor arriba? if (teclaBrillo == ConsoleKey.UpArrow) { //¿no llega al limite? if (luz < BRILLO_MAX) { // Incrementa 1. luz++; } } if (teclaBrillo == ConsoleKey.DownArrow) { if (luz > 0) { // Decremmenta 1. luz--; } } } while (teclaBrillo != ConsoleKey.Enter); } #endregion #region Radio (4). public static void radiazo() { ConsoleKey teclaRadio; Console.Clear(); do { Console.SetCursorPosition(0, 0); Console.Write("Radio: "); if (radio == true) { Console.SetCursorPosition(7, 0); Console.Write("On "); } else { Console.SetCursorPosition(7, 0); Console.Write("Off"); } teclaRadio = Console.ReadKey(true).Key; if (teclaRadio == ConsoleKey.UpArrow) { Console.SetCursorPosition(7, 0); Console.Write("On "); radio = true; } if (teclaRadio == ConsoleKey.DownArrow) { Console.SetCursorPosition(7, 0); Console.Write("Off"); radio = false; } } while (teclaRadio != ConsoleKey.Enter); } #endregion } }
Hay una parte en Ver Radio que no me sale. Si pulso la fecla del teclado arriba, me sale "Radio: On". Si sigo pulsado la fecla arriba otra vez, se queda en On, lo mismo hacia abajo, que se queda en Off. ¿Hay alguna manera de que si pulso la tecla flecha arriba todo el rato o abajo se cambie en On y Off? El código es esta función. public static void radiazo() { ConsoleKey teclaRadio; Console.Clear(); do { Console.SetCursorPosition(0, 0); Console.Write("Radio: "); if (radio == true) { Console.SetCursorPosition(7, 0); Console.Write("On "); } else { Console.SetCursorPosition(7, 0); Console.Write("Off"); } teclaRadio = Console.ReadKey(true).Key; if (teclaRadio == ConsoleKey.UpArrow) { Console.SetCursorPosition(7, 0); Console.Write("On "); radio = true; } if (teclaRadio == ConsoleKey.DownArrow) { Console.SetCursorPosition(7, 0); Console.Write("Off"); radio = false; } } while (teclaRadio != ConsoleKey.Enter); }
Saludos
|
|
|
376
|
Programación / .NET (C#, VB.NET, ASP) / Re: Menús en modo consola
|
en: 7 Febrero 2019, 06:16 am
|
Gracias, estoy en ello. Lo dejo más claro, luego hago esquema de cada submenú. Antes usé solo if. Ahora hice lo mismo pero con Switch. No se cual es el más indicado para hacer el submenú. switch (contador) { case 0: Console.SetCursorPosition(0, 0); Console.Write("FECHA"); break; case 1: Console.SetCursorPosition(0, 0); Console.Write("MENú ▲▼"); break; case 2: Console.SetCursorPosition(0, 0); Console.WriteLine("1. UNO"); break; case 3: Console.SetCursorPosition(0, 0); Console.WriteLine("2. DOS"); break; case 4: Console.SetCursorPosition(0, 0); Console.WriteLine("3. TRES"); break; case 5: Console.SetCursorPosition(0, 0); Console.WriteLine("4. CUATRO"); break; case 6: Console.SetCursorPosition(0, 0); Console.WriteLine("5. ESC = SALIR"); break; default: Console.WriteLine("Fuera de rango."); break; }
Salu2.
|
|
|
377
|
Programación / .NET (C#, VB.NET, ASP) / Re: Menús en modo consola
|
en: 5 Febrero 2019, 22:47 pm
|
Buenas: Me ha servido el truco para el código de arriba. Ahora haciendo un menú de solo usar 16x2 de resolusión. Hago este código base. En este caso lo que hace es seleccionar opciones en el menú, pero no hace nada más. Las opciones en el menú se llama. Menú ▲▼ 1. UNO 2. DOS 3. TRES 4. CUATRO 5. ESC - SALIR Por ejemplo, seleccionamos el 3. TRES. Pulse Enter y justo una línea de abajo dice: 3. TRES ▲▼ Después de pulsar Enter, se sustituye el texto 3. TRES ▲▼ por otro abajo. Alum. ●●●●●●○○ En el cual podemos hacer cosas, estando ya en la subopción indicado arriba. Si pulsamos Enter, de Alum. ●●●●●●○○ vuelve al menú principal en este caso donde estaba, llamdo 3. TRES ▲▼. Si etás todavía en Alum. ●●●●●●○○, puedes pulsar la teclas arriba y abajo para mover las opciones indicadas de esta manera mostrada abajo. Son 8 puntos. Lo que hace es alumbrar el brillo de una luz, el brillo más débil es de esta manera. Alum. ○○○○○○○○. El brillo máximo es de otra manera, Alum. ●●●●●●●●. Con las flechas del teclado arriba y abajo, seleccionamos un punto, de 1 hasta 8. La mitad sería así: Alum. ●●●●○○○○. Pulsa enter, guarda la configuración en una variable para que la recuerde y sale al menú principal. Espero que se entienda lo que quiero hacer. Dejo el código base, solo selecciona opciones pero al pulsar Enter tiene que hacer al menos el 3. TRES. Código consola C#: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Menu_consola_09_cs { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Menú de opciones"; // Tamaño ventana consola. // X anchura. Console.WindowWidth = 16; // Y altura. Console.WindowHeight = 2; // Oculto el cursor. Console.CursorVisible = false; // Contador de teclas y navegador. int contador = 0; // Capturar tecla para luego validar. ConsoleKey tecla; do { //****************************************************************** // Dibujo el menú. // Rellenar fondo verde. Console.BackgroundColor = ConsoleColor.Green; // Letras negras. Console.ForegroundColor = ConsoleColor.Black; // Limpiar pantalla. Console.Clear(); if (contador == 0) { Console.SetCursorPosition(0, 0); Console.Write("MENú ▲▼"); } if (contador == 1) { Console.SetCursorPosition(0, 0); Console.WriteLine("1. UNO"); } if (contador == 2) { Console.SetCursorPosition(0, 0); Console.WriteLine("2. DOS"); } if (contador == 3) { Console.SetCursorPosition(0, 0); Console.WriteLine("3. TRES"); } if (contador == 4) { Console.SetCursorPosition(0, 0); Console.WriteLine("4. CUATRO"); } if (contador == 5) { Console.SetCursorPosition(0, 0); Console.WriteLine("5. ESC = SALIR"); } // Fin de pintar el menú. //****************************************************************** // Leer tecla ingresada por el usuario. tecla = Console.ReadKey(true).Key; //validar el tipo de tecla if (tecla == ConsoleKey.DownArrow) { contador += 1; } if (tecla == ConsoleKey.UpArrow) { contador -= 1; } // Si está en la última opción, salta a la primera. if (contador > 5) { contador = 0; } // Si está en la primera posición, salta a la última. if (contador < 0) { contador = 5; } // Uso la tecla escape como salida. } while (tecla != ConsoleKey.Escape); } } }
Captura: Una cosa a tener en cuenta. En vez de aparecer MENú ▲▼ En pantalla, lo primero que debe aparecer en el programa en HOLA. Si pulsas Enter, entonces ya aparece el Menú. Si pulsa salir apareces en HOLA. Luego hacer lo demás con el 3. TRES indicado arriba. ¿Alguna ayuda? Saludos.
|
|
|
379
|
Programación / .NET (C#, VB.NET, ASP) / Menús en modo consola
|
en: 3 Febrero 2019, 08:54 am
|
Hola: Estoy usando la consola de C#, me dio ahora por el retro. Hice este menú de opciones, pero no hace nada. Por ahora solo selecciona las opciones. Lo que no se es como entrar en otra opción dentro de ella en DOS al pulsar Enter. Estoy en el submenú que sale un menaje que diga. Estoy dentro de la opción DOS. Con capacidad de pulsar Escape y vuelva al menú principal. Lo que he hecho hasta ahora es solo esto. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Menu_consola_02_cs { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Menú de opciones"; // Tamaño ventana consola. Console.WindowWidth = 20; // X anchura. Console.WindowHeight = 8; // Y altura. // Cursor invisible. Console.CursorVisible = false; //Contador de teclas y navegador int contador = 0; //tomar la tecla para validar luego ConsoleKey tecla; //escondo el cursor Console.CursorVisible = false; do { //****************************************************************** //Pinto el menú Console.Clear(); Console.Write("╔══════════════════╗\n"); if (contador == 0) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Write("║ UNO ║\n"); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; } else { Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Write("║ UNO ║\n"); } if (contador == 1) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Write("║ DOS ║\n"); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; } else { Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Write("║ DOS ║\n"); } if (contador == 2) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Write("║ TRES ║\n"); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; } else { Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Write("║ TRES ║\n"); } if (contador == 3) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Write("║ CUATRO ║\n"); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; } else { Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Write("║ CUATRO ║\n"); } if (contador == 4) { Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Write("║ ESC = SALIR ║\n"); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; } else { Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Write("║ ESC = SALIR ║\n"); } Console.Write("╚══════════════════╝\n"); //Fin de pintar el menú //****************************************************************** //leer tecla ingresada por el usuario tecla = Console.ReadKey(true).Key; //validar el tipo de tecla if (tecla == ConsoleKey.DownArrow) { contador += 1; } if (tecla == ConsoleKey.UpArrow) { contador -= 1; } //valido que el conteo de teclas no supere el rango establecido por los Ifs de más arriba if (contador > 4) { contador = 4; } if (contador < 0) { contador = 0; } //uso la tecla escape como salida } while (tecla != ConsoleKey.Escape); } } }
No logro cuajarlo como si se ha hecho por aquí en este otro ejemplo de abajo. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Menu_y_opciones_consola_02_cs { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Menú y opciones C# 2017"; // Tamaño ventana consola. Console.WindowWidth = 30; // X. Ancho. Console.WindowHeight = 17; // Y. Alto. // Cursor invisible. Console.CursorVisible = false; // Cuadro doble borde ventana. Menu_y_opciones_consola_02_cs.Cuadro.cuadrado(); // Posición del mansaje en la ventana. Console.SetCursorPosition(2, 2); Console.WriteLine("Elija una opción:"); Console.WriteLine(""); Console.SetCursorPosition(2, 4); Console.WriteLine("1 - Opción A."); Console.SetCursorPosition(2, 5); Console.WriteLine("2 - Opción B."); Console.SetCursorPosition(2, 6); Console.WriteLine("3 - Opción C."); Console.SetCursorPosition(2, 7); Console.WriteLine("Escape - Salir."); Console.SetCursorPosition(2, 8); Console.Write("==============="); ConsoleKey key; do { // Cursor invisible Console.CursorVisible = false; // Lee cualquier tecla. key = Console.ReadKey(true).Key; // Variable de mensaje vacío. string mensaje = string.Empty; // Leer tecla selecconada por el usuario. switch (key) { case ConsoleKey.D1: // Tecla principal 1. case ConsoleKey.NumPad1: // Tecla extendida 1. Console.SetCursorPosition(2, 10); mensaje = "OPCIÓN A."; // Mostrar mensaje en pantalla. break; case ConsoleKey.D2: case ConsoleKey.NumPad2: mensaje = "OPCIÓN B."; break; case ConsoleKey.D3: case ConsoleKey.NumPad3: mensaje = "OPCIÓN C."; break; } // Posición de los mensajes. Console.SetCursorPosition(2, 10); Console.Write(" "); // 13 espacios. Console.SetCursorPosition(2, 10); Console.Write(mensaje); } // Salir de la plicación al pulsar la tecla Escape o número 4. while (key != ConsoleKey.Escape); } } }
Saludos.
|
|
|
|
|
|
|