Seleccionar > en las opciones

Iniciado por Meta, 31 Marzo 2020, 05:24 AM

0 Miembros y 1 Visitante están viendo este tema.

Meta

Buenas:



Este programa se trata de usar solo las teclas de las flechas y Enter. Ninguna más. Me funciona lo de cambiar un nombre con las teclas de las flechas. Una vez que tenga el nombre, si pulsas la Tecla Enter, tiene que aparecer este símbolo > al lado donde pone ATRÁS.

Tiene que aparecer así:

Citar> ATRÁS      GUARDAR

Desde que esté el signo > en ATRÁS, ya se puede mover hacia GUARDAR, puedes elegir con las flechas del teclado, izquierda y derecha.

Independientemente donde esté el > sea en ATRÁS o en GUARDAR, si pulsas las flechas arriba o abajo, se pone en la parte del nombre para cambiarlo otra vez, una vez que tenga el nombre que quieras, pulsas Enter otra vez y se va este > a ATRÁS como dije antes.

Si el > está en GUARDAR como indica abajo.

CitarATRÁS     > GUARDAR

Si pulsas Enter, guarda el nombre que hayas puesto en la variable guardaNombre. Se queda simplemente almacenado ahí del programa.

Si vuelves con el > en ATRÁS y pulsas Enter. Muentra un mensaje en pantalla. Haz pulsado ATRÁS y el programa se queda ahí.

Espero que se entienda los paso que he escrito, si no se entiende algo, lo comentan.

Sólo he hecho esto.

Código C#:
Código (csharp,15) [Seleccionar]
using System;

namespace LCD_nombre_archivo_consola_02
{
    class Program
    {
        static void Main(string[] args)
        {
            // Título de la pantalla.
            Console.Title = "Cambiar nombre";

            // Tamaño de la ventana.
            Console.SetWindowSize(20, 5);

            string guardarNombre = "";
            int coordenadaX = 0;
            ConsoleKey key;

            char[] alfanumerico = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'Ñ', 'O', 'P',
                'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
            int[] indiceArray = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            string[] texto = new string[] {"ATRÁS", "GUARDAR"};

            // Fondo verde.
            Console.BackgroundColor = ConsoleColor.Blue;

            // Letras negras.
            Console.ForegroundColor = ConsoleColor.White;

            Console.Clear();

            Console.SetCursorPosition(0, 0);
            Console.Write("Nombre del relé 1:");
            Console.SetCursorPosition(0, 1);
            Console.Write("AAAAAAAAAAAAAAAA");
            Console.SetCursorPosition(2, 3);
            Console.Write(texto[0]);
            Console.SetCursorPosition(12, 3);
            Console.Write(texto[1]);

            while (true)
            {
                Console.SetCursorPosition(coordenadaX, 1);

                key = Console.ReadKey(true).Key;

                if ((key == ConsoleKey.RightArrow) && (coordenadaX < 15)) // Se cuanta del 0 al 15.
                {
                    coordenadaX++;
                }
                else if ((key == ConsoleKey.LeftArrow) && (coordenadaX > 0))
                {
                    coordenadaX--;
                }
                else if (key == ConsoleKey.UpArrow)
                {
                    indiceArray[coordenadaX]++;

                    if (indiceArray[coordenadaX] >= alfanumerico.Length)
                    {
                        indiceArray[coordenadaX] = 0;
                    }

                    Console.Write(alfanumerico[indiceArray[coordenadaX]]);
                }
                else if (key == ConsoleKey.DownArrow)
                {
                    indiceArray[coordenadaX]--;

                    if (indiceArray[coordenadaX] < 0)
                    {
                        indiceArray[coordenadaX] = alfanumerico.Length - 1;
                    }

                    Console.Write(alfanumerico[indiceArray[coordenadaX]]);
                }
            }
        }
    }
}



Gracias por todo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

EdePC

- Échale un par de ojos al siguiente código, me parece que cumple tus requerimientos, he utilizado varias funciones y esas cosas, que también ando aprendiendo algo de C# XD:

Código (csharp) [Seleccionar]
using System;

class Menu {

  static bool escribiendo = true, fin = false;
  static ConsoleKey key;
  static String nombre;
  static char[] abc123 = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789".ToCharArray();
  static int[] idx = new int[16];

  static void Main() {
    dibujaMenu();
    do {
      key = Console.ReadKey(true).Key;
      if (key == ConsoleKey.UpArrow) arriba();
      if (key == ConsoleKey.DownArrow) abajo();
      if (key == ConsoleKey.LeftArrow) izquierda();
      if (key == ConsoleKey.RightArrow) derecha();
      if (key == ConsoleKey.Enter) enter();
    } while (key != ConsoleKey.Escape && fin == false);
  }

  static void dibujaMenu() {
    Console.SetWindowSize(20, 5);
    Console.ForegroundColor = ConsoleColor.White;
    Console.BackgroundColor = ConsoleColor.Blue;
    Console.Clear();
    Console.WriteLine("Nombre del relé 1:");
    Console.WriteLine("AAAAAAAAAAAAAAAA");
    Console.WriteLine();
    Console.WriteLine("  ATRAS     GUARDAR");
    Console.SetCursorPosition(0, 1);
  }

  static void arriba() {
    if (escribiendo) {
      int col = Console.CursorLeft;
      if (idx[col] + 1 < abc123.Length) {
        idx[col]++;
      } else {
        idx[col] = 0;
      }
      escribe(col, Console.CursorTop, abc123[idx[col]].ToString());
    } else {
      escribiendo = true;
      quitarFlechas();
      Console.SetCursorPosition(0, 1);
    }
  }

  static void abajo() {
    if (escribiendo) {
      int col = Console.CursorLeft;
      if (idx[col] - 1 >= 0) {
        idx[col]--;
      } else {
        idx[col] = abc123.Length - 1;
      }
      escribe(col, Console.CursorTop, abc123[idx[col]].ToString());
    } else {
      escribiendo = true;
      quitarFlechas();
      Console.SetCursorPosition(0, 1);
    }
  }

  static void izquierda() {
    if (escribiendo) {
      if (Console.CursorLeft > 0) Console.CursorLeft--;
    } else {
      quitarFlechas();
      escribe(0, 3, ">");
    }
  }

  static void derecha() {
    if (escribiendo) {
      if (Console.CursorLeft + 1 < 16) Console.CursorLeft++;
    } else {
      quitarFlechas();
      escribe(10, 3, ">");
    }
  }

  static void escribe(int x, int y, String txt) {
    Console.SetCursorPosition(x, y);
    Console.Write(txt);
    Console.CursorLeft--;
  }

  static void enter() {
    if (escribiendo) {
      escribiendo = false;
      izquierda();
    } else {
      if (Console.CursorLeft == 0 && Console.CursorTop == 3) {
        Console.Clear();
        Console.Write("Haz pulsado ATRAS");
      }
      if (Console.CursorLeft == 10 && Console.CursorTop == 3) {
        foreach (int n in idx) nombre += abc123[n];
        Console.Clear();
        Console.Write("Se ha guardado\n[{0}]", nombre);
      }
      Console.Read();
      fin = true;
    }
  }

  static void quitarFlechas() {
    escribe(0, 3, " ");
    escribe(10, 3, " ");
  }

}

Meta

Muy bueno.

Lo que no sabía la forma que esto se puede hacer como lo hiciste.
Código (csharp) [Seleccionar]
static char[] abc123 = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789".ToCharArray();

Ni en los documentos oficiales aparece ese ejemplo que hiciste.
https://docs.microsoft.com/es-es/dotnet/api/system.array?view=netframework-4.8

El compilador me indicó que pusiera readonly (solo lectura).
Código (csharp) [Seleccionar]
        static bool escribiendo = true, fin = false;
        static ConsoleKey key;
        static String nombre;
        static readonly char[] abc123 = " ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789".ToCharArray();
        static readonly int[] idx = new int[16];


Funciona todo el programa perfecto. Faltó un detalle. Si estás en las flechas en la zona.

> ATRÁS     GUARDAR.

Cuando pulses todo el rato la flecha izquierda o derecha, tiene que rotar el cursos >, no que si pulso izquierda, se quede ahí.

En cuanto a lo demás, buena calidad del código y buen trabajo.

Saludos.  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/