Foros del Web » Programación para mayores de 30 ;) » .NET »

Corregir este programa

Estas en el tema de Corregir este programa en el foro de .NET en Foros del Web. Buenas gente del foro: Teniendo este programa, no se comporta como quiero. Se trata de usar solo las teclas flechas y la tecla Enter. Con ...
  #1 (permalink)  
Antiguo 17/06/2020, 11:59
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 718
Antigüedad: 13 años, 1 mes
Puntos: 8
Corregir este programa

Buenas gente del foro:

Teniendo este programa, no se comporta como quiero. Se trata de usar solo las teclas flechas y la tecla Enter. Con ello se puede crear un nombre, escribir un nombre que quiera. Cuando ya termine, pulso Enter y se posiciona en la parte indicada en la imagen de abajo.

Aquí abajo, escribí todo a AAAAAAAAAAAAA.

Al pulsar Enter, tiene que ser capaz de señalar con las teclas flechas izquiera y derecha para poder elegir ATRÁS o GUARDAR.


Una vez que haya elegido con el símbolo en > ATRÁS, si pulsa Enter muestra un mensaje:
Código:
Console.Write("HAS PULSADO ATRÁS   ");
El programa en esta parte se acaba ahí.

Si con las flechas del teclado selecciona en > GUARDAR, luego pulsa la tecla Enter. A parte que el nombre como en este caso AAAAAAAAAAA, se almacena en la variable...
Código:
static string guardarNombre = "";
Muestra el mensaje: HAS GUARDADO y el nombre AAAAAAAAAAAAAAAA en pantalla.

Código completo en C#:
Código:
using System;

namespace LCD_nombre_archivo_consola_06
{
    class Program
    {
        static string guardarNombre = "";
        static int coordenadaX = 0;
        private static ConsoleKey tecla;

        // Caracteres de este array.
        static readonly char[] roALFANUMERICO = new char[] 
        {
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
            'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
            'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
            'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
            '¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '
        };

        // Dirección del carácter del array. El 80 presenta al espacio del array roALFANUMERICO.
        static readonly int[] roINDICE_ARRAY = new int[] 
        { 
            80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80 
        };

        private static readonly string[] roTEXTO = new string[] { "ATRÁS", "GUARDAR" };

        static int index = 0; 
        static void Main(string[] args)
        {
            // Título de la pantalla.
            Console.Title = "Cambiar nombre";

            Inicio();
        }

        #region Inico.
        private static void Inicio()
        {
            // Tamaño de la ventana.
            Console.SetWindowSize(20, 5);

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

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

            // Limpiar pantalla.
            Console.Clear();

            Console.SetCursorPosition(0, 0);
            Console.Write("Nombre del relé 1:  ");
            Console.SetCursorPosition(0, 1);
            //Console.Write("AAAAAAAAAAAAAAAA");

            // Recorre todo el índice del array y el de los datos alfanumérico
            // y los rellena.
            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
            {
                Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
            }

            Console.SetCursorPosition(2, 3);
            Console.Write(roTEXTO[0]); // ATRÁS.
            Console.SetCursorPosition(12, 3);
            Console.Write(roTEXTO[1]); // GUARDAR.

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

                // Almacena cualquier tecla pulsada en la variable key.
                tecla = Console.ReadKey(true).Key;
                switch (tecla)
                {
                    case ConsoleKey.RightArrow:
                        if (coordenadaX < 15)
                        {
                            coordenadaX++;
                        }
                        break;

                    case ConsoleKey.LeftArrow:
                        if (coordenadaX > 0)
                        {
                            coordenadaX--;
                        }
                        break;

                    case ConsoleKey.UpArrow:
                        roINDICE_ARRAY[coordenadaX]++;
                        if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
                        {
                            roINDICE_ARRAY[coordenadaX] = 0;
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.DownArrow:
                        roINDICE_ARRAY[coordenadaX]--;
                        if (roINDICE_ARRAY[coordenadaX] < 0)
                        {
                            roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.Enter:
                         Console.SetCursorPosition(1, 3);
                         Console.Write(">");
  
                            while (true)
                            {
                                tecla = Console.ReadKey(true).Key;

                                switch (tecla)
                                {
                                    case ConsoleKey.RightArrow:
                                    case ConsoleKey.LeftArrow:
                                        index = 1 - index;
                                        break;

                                    case ConsoleKey.UpArrow:
                                    case ConsoleKey.DownArrow:
                                        Console.SetCursorPosition(coordenadaX, 1);
                                        break;

                                    case ConsoleKey.Enter:

                                        break;
                                }

                                for (int a = 0; a < 2; a++)
                                {
                                    Console.SetCursorPosition(1 + (10 * a), 3);
                                    if (a == index)
                                    {
                                        Console.Write(">");
                                }
                                else
                                {
                                    Console.Write(" ");
                                }
                            }

                            if (index == 0)  // se pulsó Atrás
                            {
                                Atras();
                                //break;  // vuelve a la edición de letras
                            }
                            
                            if (index == 1)  // se pulsó Guardar
                            {
                                Guardar();
                            }
                        }
                }
            }
        }
        #endregion

        private static void Atras()
        {
            Console.Clear();
            Console.SetCursorPosition(0, 1);
            Console.Write("HAS PULSADO ATRÁS   ");
            Console.ReadKey(); // Pulse cualquier tecla para salir.
        }

        private static void Guardar()
        {
            Console.Clear();
            Console.SetCursorPosition(0, 1);
            Console.Write("HAS GUARDADO       ");
            for (int a = 0; a < roINDICE_ARRAY.Length; a++)
            {
                guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
            }
            Console.SetCursorPosition(0, 2);
            Console.Write(guardarNombre);
        }
    }
}
¿Alguna idea?

Un saludo.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar

Última edición por REHome; 17/06/2020 a las 12:15



La zona horaria es GMT -6. Ahora son las 22:08.