Intentar lograr el programa deseado

  • 6 Respuestas
  • 664 Vistas

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

Desconectado Meta

  • *
  • Underc0der
  • Mensajes: 39
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Intentar lograr el programa deseado

  • en: Julio 07, 2020, 06:20:38 pm
Hola:

Este código funciona a medias. Más bien, no logro situarlo. Está escrito en consola C#.

Lo que hace el programa:

Se usa solo las teclas flechas del teclado y la tecla Enter.

El programa empieza así;


Como puedes ver arriba, puedes escribir con las flechas arriba y abajo letras para poner un nombre. Por ejemplo, voy a poner Hola amigo. Lo puedes ver en la captura de abajo.



Pulsa Enter.
Se muestra el > al lado de ATRÁS. Tal como muestra abajo.


Lo que debe hace en esta parte indicado en la imagen de arriba es:
1. Si toco las flechas del teclado izquierda y derecha, me señala con > Atrás o en GUARDAR.
2. Si pulso las flecha arriba o abajo, puedes volver a editar la palabra "Hola amigo", puedes corregir o escribir otra cosa.
3. Si pulsas Enter donde estabas escribiendo "Hola amigo", vuelves en ATRÁS con el >.
4. Estando en > ATRÁS, si pulsas Enter, muestra un mensaje tal como muestra en la captura de abajo y el programa se acaba ahí.



El problema que no me funciona esta parte y la que voy a indicar ahora tampoco me funciona.
Si estoy en > ATRÁS, al pulsas las flechas derecha o izquierda, debo estar ya en > GUARDAR.

Precisamente no me sale.

A parte de esto, si pulsas Enter cuando estés en > GUARDAR. Se queda guardado el texto "Hola amigo" guardado en una variable que en este caso se llama static string guardarNombre = "";

Se tiene que mostrar la imagen de abajo.


Y se acaba el programa.

Me perdí. Alguna idea como se programa esto.

Código C#:
Código: You are not allowed to view links. Register or Login
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LCD_nombre_archivo_consola_08
{
    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); // X

            // Fondo verde, azul, gris.
            Console.BackgroundColor = ConsoleColor.Gray;

            // Letras negras, blanco, negro.
            Console.ForegroundColor = ConsoleColor.Black;

            // 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.CursorVisible = false;
                        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);
        }
    }
}

Gracias.
« Última modificación: Julio 08, 2020, 12:30:13 am por AXCESS »

Desconectado d3adly

  • *
  • Underc0der
  • Mensajes: 90
  • Actividad:
    0%
  • Country: 00
  • Reputación 5
    • Ver Perfil
    • sh1tty c0d3
    • Email

Re:Intentar lograr el programa deseado

  • en: Julio 08, 2020, 02:13:11 am
Hola @You are not allowed to view links. Register or Login, me disculpo si la siguiente respuesta no concuerda a tu pregunta pero te explico lo que pude entender de tu dilema.
Despues de haber creado la "frase" se presiona ENTER, y lo que quieres es elegir entre las opciones ATRAS y GUARDAR dibujando el simbolo > antes de dicha opcion. Y que luego de seleccionar dicha opcion el programa te permita seguir editando la "frase" antes creada. O me equivoco?

De no ser asi, te ofrezco una posible solucion.

Primero no necesitas usar tantas clases. Basta con:
Código: (csharp) You are not allowed to view links. Register or Login
using System;
Luego por simple mania y para poder redibujar la consola de una manera mas accesible cree la funcion MainMenu:
Código: (csharp) You are not allowed to view links. Register or Login
private static void MainMenu(){
        Console.Clear();

            Console.SetCursorPosition(0, 0);
            Console.Write("Nombre del relé 1:  ");
            Console.SetCursorPosition(0, 1);
           
            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.
        }

Luego en las primeras lineas del bucle principal, se modifica de la siguiente manera:
Código: (csharp) You are not allowed to view links. Register or Login
while (true){
            index = 0;
            if(tecla == ConsoleKey.Enter || tecla == ConsoleKey.RightArrow || tecla == ConsoleKey.LeftArrow){
            MainMenu();
            }
Compara la tecla presionada anteriormente, cuando se esta en modo "edicion", por asi decirlo, y solamente redibuja la pantalla si se presiono ENTER, -> o <-, para asi tener que evitar llamar a la funcion MainMenu y que parpadee mucho la consola.

Despues sigue la seccion de construir la "frase" y mas abajo esta la nueva modificacion:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter){
  switch (tecla){
case ConsoleKey.RightArrow:
   index = 1;
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(10, 3);
Console.Write(">");
break;
case ConsoleKey.LeftArrow:
   Console.SetCursorPosition(10, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
break;
case ConsoleKey.UpArrow:
case ConsoleKey.DownArrow:
        Console.SetCursorPosition(coordenadaX, 1);
break;
}
}

Siendo la linea:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter){una condicion que se cumplira mientras no se precione la tecla ENTER.

Luego el siguiente segmento que se ejecuta al presionar la tecla ->:
Código: (csharp) You are not allowed to view links. Register or Login
index = 1;
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(10, 3);
Console.Write(">");
el cual borra el > escrito anteriormente al lado de ATRAS y lo dibuja entes de la palabra GUARDAR, ademas se le asigna 1 a la variable index.

Lo mismo pero a la inversa si se presiona la tecla <-:
Código: (csharp) You are not allowed to view links. Register or Login
Console.SetCursorPosition(10, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
borra el > que se encuentra al lado de GUARDAR y lo dibuja al lado de ATRAS, y se le asigna el valor de 0 a la variable index. Asi se logra un "efecto" de navegacion entre las opciones disponibles ya que mientras no presiones ENTER dibuja > al lado de la opcion correspondiente.

Otra modificacion "significativa" seria en al funcion Guardar:
Código: (csharp) You are not allowed to view links. Register or Login
private static void Guardar(){
guardarNombre = ""; // <--- Aqui
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);
Console.ReadKey();   // <--- Aqui
}
Primero "resetear" la variable guardarNombre para evitar agregar los datos antes "seteados", y la llamada a Console.ReadKey() para mostrar el mensaje por pantalla sin que se esfume de una vez.

Por ultimo este segmento de codigo es innecesario:
Código: (csharp) You are not allowed to view links. Register or Login
for (int a = 0; a < 2; a++)
{
Console.SetCursorPosition(1 + (10 * a), 3);
if (a == index)
{
Console.Write(">");
}
else
{
Console.Write(" ");
}
}

Concluyendo, tu codigo podria quedar de la siguiente manera:
Código: (csharp) You are not allowed to view links. Register or Login
using System;
namespace LCD_nombre_archivo_consola_08
{
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();
}

private static void MainMenu(){
Console.Clear();

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

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.
}

#region Inico.
private static void Inicio()
{
Console.SetWindowSize(20, 5);
Console.BackgroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor.Black;

MainMenu();
while (true)
{
index = 0;
if(tecla == ConsoleKey.Enter || tecla == ConsoleKey.RightArrow || tecla == ConsoleKey.LeftArrow){
MainMenu();
}
Console.SetCursorPosition(coordenadaX, 1);

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.CursorVisible = false;
Console.Write(">");

while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter){

switch (tecla)
{
case ConsoleKey.RightArrow:
index = 1;
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(10, 3);
Console.Write(">");
break;
case ConsoleKey.LeftArrow:
Console.SetCursorPosition(10, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
break;

case ConsoleKey.UpArrow:
case ConsoleKey.DownArrow:
Console.SetCursorPosition(coordenadaX, 1);
break;
}
}
if (index == 0){
Atras();
}
if (index == 1){
Guardar();
}
break;
}
}
}
#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()
{
guardarNombre = "";
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);
Console.ReadKey();
}
}
}

Espero te sirva de algo, saludos.
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn

Desconectado Meta

  • *
  • Underc0der
  • Mensajes: 39
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Re:Intentar lograr el programa deseado

  • en: Julio 08, 2020, 06:58:03 am
Buenas:

Menuda explicación.  :)
Hay cosas que quiero matizar.

1)
Escribí bien el Hola como se puede ver abajo. Está un poco separado > GUARDAR. El >ATRÁS pegado. Tiene que estar así: > ATRÁS, no con el > pegado en atrás cmo aquí, >ATRÁS.
Otra cosa, que si pulsa la tecla izquierda, se queda el > en izquierda, la idea es, independiente de que pusle la tecla todo el rato izquierda o derecha, se pueda mover en >ATRÁS o GUARDAR. Como indica en la imagen de abajo.


2)
Entando la > en ATRÁS o en GUARDAR, si pulsas la tecla arriba o abajo, tiene que poder ir otra vez a editar el nombre como indica abajo.
Vamos a suponer que estamos en >ATRÁS como indica abajo.


Si pulsa la tecla arriba o abajo estés en >ATRÁS o >GUARDAR, directament te lleva a editar otra vez el nombre.


Todo lo demás que haz hecho, está perfecto. ;)

Saludos. En general, buen trabajo. ;)
« Última modificación: Julio 08, 2020, 07:10:22 am por Meta »

Desconectado d3adly

  • *
  • Underc0der
  • Mensajes: 90
  • Actividad:
    0%
  • Country: 00
  • Reputación 5
    • Ver Perfil
    • sh1tty c0d3
    • Email

Re:Intentar lograr el programa deseado

  • en: Julio 08, 2020, 12:49:16 pm
Hola @You are not allowed to view links. Register or Login, en ese caso se soluciona de una manera simple.

Primero se crea una variable global (mas adelante te explico el porque):
Código: (csharp) You are not allowed to view links. Register or Login
static bool bRegresarEditar = false;
Luego en el segundo bucle condicional while, se modifica de esto:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter)
A esto:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter && !bRegresarEditar)
La cual se cumplira mientras no se presione ENTER y la variable bRegresarEditar siga siendo falsa. Luego esta la forma de "navegar" entre las opciones. Los cases en donde se presione -> o <- seran iguales:
Código: (csharp) You are not allowed to view links. Register or Login
case ConsoleKey.RightArrow:
if(index == 1){
Console.SetCursorPosition(11, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
} else {
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(11, 3);
Console.Write(">");
index = 1;
}
break;
case ConsoleKey.LeftArrow:
if(index == 1){
Console.SetCursorPosition(11, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
} else {
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(11, 3);
Console.Write(">");
index = 1;
}
break;

Ya que como dices independientemente de que se presione siga cambiando de opcion. Luego al estar entre las opciones de ATRAS o GUARDAR, si se presiona arriba o abajo se ejecua lo siguiente:
Código: (csharp) You are not allowed to view links. Register or Login
if(index == 0){
Console.SetCursorPosition(1, 3);
Console.Write(" ");
} else {
Console.SetCursorPosition(11, 3);
Console.Write(" ");
}
bRegresarEditar = true; // <-- Primer uso de la nueva variable antes creada

Al asignar el valor de verdadero(true)) a la variable se rompe el bucle:
Código: (csharp) You are not allowed to view links. Register or Login
while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter && !bRegresarEditar)con lo cual continua ejecutando el resto del case, en donde esta el nuevo segmento de codigo:

Código: (csharp) You are not allowed to view links. Register or Login
if(bRegresarEditar){                   
bRegresarEditar = false;   
continue;
}
el cual comprueba si la variable es falsa, en otras palabras, si presionaste arriba o abajo estando entre las opciones de ATRAS o GUARDAR. A su vez vuelve a asignarle false a la variable para "resetearla" y luego esta el continue el cual hace regresar al inicio del bucle principal sin comprobar si se eligio alguna de las opciones anteriores.

Lo de la posicion del simbolo > le asigne el valor de 10 para probar pero solo hay una espacio de diferencia con lo cual el valor se le aumenta en 1, es cuestion de logica solamente aumentar la posicion del cursor en X para dibujar el caracter:
Código: (csharp) You are not allowed to view links. Register or Login
Console.SetCursorPosition(11, 3);
El nuevo codigo puede quedar asi:
Código: (csharp) You are not allowed to view links. Register or Login
using System;
namespace LCD_nombre_archivo_consola_08
{
class Program
{
static string guardarNombre = "";
static int coordenadaX = 0;
private static ConsoleKey tecla;
static bool bRegresarEditar = false;

// 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[]
{
8, 0, 88, 80, 88, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
};

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

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

Inicio();
}

private static void MainMenu(){
Console.Clear();

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

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.
}

#region Inico.
private static void Inicio()
{
Console.SetWindowSize(20, 5);
Console.BackgroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor.Black;

MainMenu();
while (true)
{
index = 0;
if(tecla == ConsoleKey.Enter || tecla == ConsoleKey.RightArrow || tecla == ConsoleKey.LeftArrow){
MainMenu();
}
Console.SetCursorPosition(coordenadaX, 1);

tecla = Console.ReadKey(true).Key;
tecla = ConsoleKey.Enter;
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.CursorVisible = false;
Console.Write(">");

while((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter && !bRegresarEditar){

switch (tecla)
{
case ConsoleKey.RightArrow:
if(index == 1){
Console.SetCursorPosition(11, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
} else {
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(11, 3);
Console.Write(">");
index = 1;
}
break;
case ConsoleKey.LeftArrow:
if(index == 1){
Console.SetCursorPosition(11, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
} else {
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(11, 3);
Console.Write(">");
index = 1;
}
break;

case ConsoleKey.UpArrow:
case ConsoleKey.DownArrow:
if(index == 0){
Console.SetCursorPosition(1, 3);
Console.Write(" ");
} else {
Console.SetCursorPosition(11, 3);
Console.Write(" ");
}
bRegresarEditar = true;
break;
}
}
if(bRegresarEditar){
bRegresarEditar = false;
continue;
}
if (index == 0){
Atras();
}
if (index == 1){
Guardar();
}
break;
}
}
}
#endregion

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

private static void Guardar()
{
guardarNombre = "";
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);
//Console.ReadKey();
}
}
}

Saludos.
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn

Desconectado Meta

  • *
  • Underc0der
  • Mensajes: 39
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Re:Intentar lograr el programa deseado

  • en: Julio 08, 2020, 01:00:58 pm
Al ejecutar tu programa me sale esto.

Citar
System.IndexOutOfRangeException: 'Índice fuera de los límites de la matriz.'

Modifiqué el código del primer post y funciona.
Solamente tenía que poner Inici() en dos partes indicado abajo.
Código: You are not allowed to view links. Register or Login
                                case ConsoleKey.UpArrow:
                                    Inicio();
                                    break;

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

Aún hay un problema.
Cuando está el > en ATRÁS GUARDAR.

Si pulsas todo el rato derecho o izquiero, tiene que cambiarse la >. Ya que si pulsas izquierda, que queda todo el rato el > ATRÁS y no se pasa a GUARDAR.

Dejo el código completo.

Código: (csharp,136,140) You are not allowed to view links. Register or Login
using System;
namespace LCD_nombre_archivo_consola_10
{
    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();
        }

        private static void MainMenu()
        {
            Console.Clear();

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

            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
            {
                Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
            }

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

        #region Inico.
        private static void Inicio()
        {
            Console.SetWindowSize(20, 5);
            Console.BackgroundColor = ConsoleColor.Gray;
            Console.ForegroundColor = ConsoleColor.Black;

            MainMenu();
           
            while (true)
            {
                Console.CursorVisible = true;
                index = 0;
                if (tecla == ConsoleKey.Enter || tecla == ConsoleKey.RightArrow || tecla == ConsoleKey.LeftArrow)
                {
                    MainMenu();
                }
                Console.SetCursorPosition(coordenadaX, 1);

                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.CursorVisible = false;
                        Console.Write(">");

                        while ((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter)
                        {

                            switch (tecla)
                            {
                                case ConsoleKey.RightArrow:
                                    index = 1;
                                    Console.SetCursorPosition(1, 3);
                                    Console.Write(" ");
                                    Console.SetCursorPosition(10, 3);
                                    Console.Write(">");
                                    break;
                                case ConsoleKey.LeftArrow:
                                    Console.SetCursorPosition(10, 3);
                                    Console.Write(" ");
                                    Console.SetCursorPosition(1, 3);
                                    Console.Write(">");
                                    index = 0;
                                    break;

                                case ConsoleKey.UpArrow:
                                    Inicio();
                                    break;

                                case ConsoleKey.DownArrow:
                                    Inicio();
                                    Console.SetCursorPosition(coordenadaX, 1);
                                    break;
                            }
                        }
                        if (index == 0)
                        {
                            Atras();
                        }
                        if (index == 1)
                        {
                            Guardar();
                        }
                        break;
                }
            }
        }
        #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()
        {
            guardarNombre = "";
            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);
            Console.ReadKey();
        }
    }
}
Solo falla lo que comenté arriba, lo de las flechas > ATRÁS GUARDAR.

Gracias.
« Última modificación: Julio 08, 2020, 01:06:52 pm por Meta »

Desconectado d3adly

  • *
  • Underc0der
  • Mensajes: 90
  • Actividad:
    0%
  • Country: 00
  • Reputación 5
    • Ver Perfil
    • sh1tty c0d3
    • Email

Re:Intentar lograr el programa deseado

  • en: Julio 08, 2020, 02:44:53 pm
@You are not allowed to view links. Register or Login creo que no viste la ultima respuesta que te proporcione.
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn

Desconectado Meta

  • *
  • Underc0der
  • Mensajes: 39
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Re:Intentar lograr el programa deseado

  • en: Julio 08, 2020, 05:47:38 pm
Disculpe usted, tienes razón.

Muchísimas gracias por la ayuda.