REHome |
24-07-2024 12:18:10 |
En un folio tengo hecho las ventanas o páginas señalado por flechas. Para no perderme.
Si quiere en DropBox subo el proyecto para que lo veas, aún está incompleto.
Lo que se ha hecho por ahora es esto.
Program.cs
Código:
// El menú principal que muestra nada más ejecutar el programa.
using System;
namespace LCD_Menu_con_submenus_Consola_03
{
internal class Program
{
static void Main(string[] args)
{
// Acceso a la ventana de inicio principal.
Inicio.InicioPrincipal();
}
}
}
MenuPrincipal.cs
Código:
// El menú principal que muestra nada más ejecutar el programa.
// ** MENÚ PRINCIPAL **
// > ESTADO PRINCIPAL
// NOMBRES RELÉS
// NOMBRES SENSORES
// -------------------
// ** MENÚ PRINCIPAL **
// ENTRADA ANALÓGICA
// CONFIGURACIÓN
// ACERCA DE...
// -------------------
// ** MENÚ PRINCIPAL **
// AYUDA
// EXTRA
// INICIO
using System;
namespace LCD_Menu_con_submenus_Consola_03
{
public class MenuPrincipal
{
// Variable global o estática.
public static int opcion = 0;
public static void Menu_Principal()
{
// Contador de teclas y navegador.
bool salir = false;
const int SELECCION_MENU = 8;
// Capturar tecla para luego validar.
ConsoleKey tecla;
// Limpiar pantalla.
Console.Clear();
do
{
//******************************************************************
// Dibujo el menú principal.
// Cursor invisible.
Console.CursorVisible = false;
string[] MENSAJES =
{
"** MENÚ PRINCIPAL **", // Posición 0.
" ESTADO PRINCIPAL ", // 1
" NOMBRE RELÉS ", // 2
" NOMBRE SENSORES ", // 3
" ENTRADA ANALÓGICA ", // 4
" CONFIGURACIÓN ", // 5
" ACERCA DE... ", // 6
" AYUDA ", // 7
" EXTRA ", // 8
" INICIO ", // 9
" ", // 10
">" // 11
};
switch (opcion)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.Write(MENSAJES[0]); // ** MENÚ PRINCIPAL **
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[1]); // > ESTADO PRINCIPAL
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[11]); // >
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[2]); // NOMBRE RELÉS
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[3]); // NOMBRE SENSORES
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.Write(MENSAJES[0]); // ** MENÚ PRINCIPAL **
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[1]); // ESTADO PRINCIPAL
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[2]); // > NOMBRE RELÉS
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[11]); // >
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[3]); // NOMBRE SENSORES
break;
case 2:
Console.SetCursorPosition(0, 0);
Console.Write(MENSAJES[0]); // ** MENÚ PRINCIPAL **
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[1]); // ESTADO PRINCIPAL
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[2]); // NOMBRE RELÉS
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[3]); // > NOMBRE SENSORES
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[11]); // >
break;
case 3:
Console.SetCursorPosition(0, 0);
Console.Write(MENSAJES[0]); // ** MENÚ PRINCIPAL **
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[4]); // > ENTRADA ANALÓGICA
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[11]); // >
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[5]); // CONFIGURACIÓN
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[6]); // ACERCA DE...
break;
case 4:
Console.SetCursorPosition(0, 0);
Console.Write(MENSAJES[0]); // ** MENÚ PRINCIPAL **
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[4]); // ENTRADA ANALÓGICA
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[5]); // > CONFIGURACIÓN
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[11]); // >
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[6]); // ACERCA DE...
break;
case 5:
Console.SetCursorPosition(0, 0);
Console.Write(MENSAJES[0]); // ** MENÚ PRINCIPAL **
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[4]); // ENTRADA ANALÓGICA
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[5]); // CONFIGURACIÓN
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[6]); // > ACERCA DE...
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[11]); // >
break;
case 6:
Console.SetCursorPosition(0, 0);
Console.Write(MENSAJES[0]); // ** MENÚ PRINCIPAL **
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[7]); // > AYUDA
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[11]); // >
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[8]); // EXTRA
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[9]); // INICIO
break;
case 7:
Console.SetCursorPosition(0, 0);
Console.Write(MENSAJES[0]); // ** MENÚ PRINCIPAL **
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[7]); // AYUDA
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[8]); // > EXTRA
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[11]); // >
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[9]); // INICIO
break;
case 8:
Console.SetCursorPosition(0, 0);
Console.Write(MENSAJES[0]); // ** MENÚ PRINCIPAL **
Console.SetCursorPosition(0, 1);
Console.Write(MENSAJES[7]); // AYUDA
Console.SetCursorPosition(0, 2);
Console.Write(MENSAJES[8]); // EXTRA
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[9]); // > INICIO
Console.SetCursorPosition(0, 3);
Console.Write(MENSAJES[11]); // >
break;
default:
Console.Write("Fuera de rango. ");
break;
}
// Fin de pintar el menú principal.
//******************************************************************
// Leer tecla ingresada por el usuario.
tecla = Console.ReadKey(true).Key;
// Validar el tipo de tecla.
if (tecla == ConsoleKey.Enter)
{
switch (opcion)
{
case 0:
EstadoPrincipal.Estado_Principal();
break;
case 1:
NombresReles.NombreReles_Principal();
break;
case 2:
NombreSensores.NombreSensores_Principal();
break;
case 3:
// Opcion();
break;
case 4:
//
break;
case 5:
//
break;
case 6:
//
break;
case 7:
//
break;
case 8:
salir = true;
//opcion = 0; // Vuelve al menú principal.
break;
default:
Console.Write("Fuera de rango. ");
break;
}
}
// ¿Has pulsado tecla flecha Abajo?
else if (tecla == ConsoleKey.DownArrow)
{
opcion++;
}
// Entonces si pulsas tecla flecha Arriba.
else if (tecla == ConsoleKey.UpArrow)
{
opcion--;
}
// Si está en la última opción, salta a la primera.
if (opcion > SELECCION_MENU)
{
opcion = 0;
}
// Si está en la primera posición, salta a la última.
if (opcion < 0)
{
opcion = SELECCION_MENU;
}
// Uso la tecla escape como salida.
} while (salir == false);
}
}
}
Inicio.cs
Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LCD_Menu_con_submenus_Consola_03
{
public class Inicio
{
public static void InicioPrincipal()
{
// Almacena la tecla pulsada en la variable.
ConsoleKey teclaInicial;
do
{
// Establece el ancho y alto de la ventana.
Console.SetWindowSize(20, 5);
// Limpiar pantalla.
Console.Clear();
// Posición del cursor del título del MENÚ PRINCIPAL.
Console.SetCursorPosition(0, 0);
// Título.
Console.Write(" INICIO ");
// Pocisión de la hora.
Console.SetCursorPosition(4, 2);
// Formato numérico dd/MM/yyyy.
Console.Write(DateTime.Now.ToString("ddd dd MMM"));
// Cursor invisible.
Console.CursorVisible = false;
// Almacena en la variable una tecla pulsada.
teclaInicial = Console.ReadKey(true).Key;
// ¿Haz pulsado la tecla Enter?
if (teclaInicial == ConsoleKey.Enter)
{
// Sí. Se ejecuta esta función.
MenuPrincipal.Menu_Principal();
}
} while (teclaInicial != ConsoleKey.Escape);
// Menú principal.
// ---------------------------------------------------
// MenuPrincipal.Menu_Principal();
// NombresReles.NombreReles_Principal();
// EstadoPrincipal.Estado_Principal();
}
}
}
No pongo más código porque es mucho.
La idea es que funcione bien. Con un Wiondows Form, solo con un botón, cierra o oculta la página o furmulario actual y llamas al otro, la idea que en consolas es más complicado. Sobre todo usando solo flechas del teclado, Enter y Scape.
Esta forma de programar me enseñó un amigo pero todo el mundo dice que este código es horrible, :D
Usa dos Switch cuando solo hace falta uno dentro de un do While.
La verdad, quiero aprender y diseñar bien elegir páginas o ventanas y que se llamen entre ellas, luego aplicar sus funciones.
La ventana del vídeo, se mueve mediante flechas, cuando tenga una opción seleccionada, por ejemplo la imagen de abajo.
Pulsas Enter y te vas a la otra indicada abajo.
Si vuelves a pulsar Enter, vuelves a la pantalla anterior. Esos detalles así es lo que quiero, no es tan fácil como aparenta.
|