elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Seleccionar > en las opciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Seleccionar > en las opciones  (Leído 2,269 veces)
Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Seleccionar > en las opciones
« en: 31 Marzo 2020, 05:24 am »

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.

Citar
ATRÁ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
  1. using System;
  2.  
  3. namespace LCD_nombre_archivo_consola_02
  4. {
  5.    class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            // Título de la pantalla.
  10.            Console.Title = "Cambiar nombre";
  11.  
  12.            // Tamaño de la ventana.
  13.            Console.SetWindowSize(20, 5);
  14.  
  15.            string guardarNombre = "";
  16.            int coordenadaX = 0;
  17.            ConsoleKey key;
  18.  
  19.            char[] alfanumerico = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'Ñ', 'O', 'P',
  20.                'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
  21.            int[] indiceArray = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  22.            string[] texto = new string[] {"ATRÁS", "GUARDAR"};
  23.  
  24.            // Fondo verde.
  25.            Console.BackgroundColor = ConsoleColor.Blue;
  26.  
  27.            // Letras negras.
  28.            Console.ForegroundColor = ConsoleColor.White;
  29.  
  30.            Console.Clear();
  31.  
  32.            Console.SetCursorPosition(0, 0);
  33.            Console.Write("Nombre del relé 1:");
  34.            Console.SetCursorPosition(0, 1);
  35.            Console.Write("AAAAAAAAAAAAAAAA");
  36.            Console.SetCursorPosition(2, 3);
  37.            Console.Write(texto[0]);
  38.            Console.SetCursorPosition(12, 3);
  39.            Console.Write(texto[1]);
  40.  
  41.            while (true)
  42.            {
  43.                Console.SetCursorPosition(coordenadaX, 1);
  44.  
  45.                key = Console.ReadKey(true).Key;
  46.  
  47.                if ((key == ConsoleKey.RightArrow) && (coordenadaX < 15)) // Se cuanta del 0 al 15.
  48.                {
  49.                    coordenadaX++;
  50.                }
  51.                else if ((key == ConsoleKey.LeftArrow) && (coordenadaX > 0))
  52.                {
  53.                    coordenadaX--;
  54.                }
  55.                else if (key == ConsoleKey.UpArrow)
  56.                {
  57.                    indiceArray[coordenadaX]++;
  58.  
  59.                    if (indiceArray[coordenadaX] >= alfanumerico.Length)
  60.                    {
  61.                        indiceArray[coordenadaX] = 0;
  62.                    }
  63.  
  64.                    Console.Write(alfanumerico[indiceArray[coordenadaX]]);
  65.                }
  66.                else if (key == ConsoleKey.DownArrow)
  67.                {
  68.                    indiceArray[coordenadaX]--;
  69.  
  70.                    if (indiceArray[coordenadaX] < 0)
  71.                    {
  72.                        indiceArray[coordenadaX] = alfanumerico.Length - 1;
  73.                    }
  74.  
  75.                    Console.Write(alfanumerico[indiceArray[coordenadaX]]);
  76.                }
  77.            }
  78.        }
  79.    }
  80. }
  81.  
  82.  

Gracias por todo.


« Última modificación: 31 Marzo 2020, 05:31 am por Meta » En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.042



Ver Perfil
Re: Seleccionar > en las opciones
« Respuesta #1 en: 1 Abril 2020, 05:48 am »

- É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
  1. using System;
  2.  
  3. class Menu {
  4.  
  5.  static bool escribiendo = true, fin = false;
  6.  static ConsoleKey key;
  7.  static String nombre;
  8.  static char[] abc123 = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789".ToCharArray();
  9.  static int[] idx = new int[16];
  10.  
  11.  static void Main() {
  12.    dibujaMenu();
  13.    do {
  14.      key = Console.ReadKey(true).Key;
  15.      if (key == ConsoleKey.UpArrow) arriba();
  16.      if (key == ConsoleKey.DownArrow) abajo();
  17.      if (key == ConsoleKey.LeftArrow) izquierda();
  18.      if (key == ConsoleKey.RightArrow) derecha();
  19.      if (key == ConsoleKey.Enter) enter();
  20.    } while (key != ConsoleKey.Escape && fin == false);
  21.  }
  22.  
  23.  static void dibujaMenu() {
  24.    Console.SetWindowSize(20, 5);
  25.    Console.ForegroundColor = ConsoleColor.White;
  26.    Console.BackgroundColor = ConsoleColor.Blue;
  27.    Console.Clear();
  28.    Console.WriteLine("Nombre del relé 1:");
  29.    Console.WriteLine("AAAAAAAAAAAAAAAA");
  30.    Console.WriteLine();
  31.    Console.WriteLine("  ATRAS     GUARDAR");
  32.    Console.SetCursorPosition(0, 1);
  33.  }
  34.  
  35.  static void arriba() {
  36.    if (escribiendo) {
  37.      int col = Console.CursorLeft;
  38.      if (idx[col] + 1 < abc123.Length) {
  39.        idx[col]++;
  40.      } else {
  41.        idx[col] = 0;
  42.      }
  43.      escribe(col, Console.CursorTop, abc123[idx[col]].ToString());
  44.    } else {
  45.      escribiendo = true;
  46.      quitarFlechas();
  47.      Console.SetCursorPosition(0, 1);
  48.    }
  49.  }
  50.  
  51.  static void abajo() {
  52.    if (escribiendo) {
  53.      int col = Console.CursorLeft;
  54.      if (idx[col] - 1 >= 0) {
  55.        idx[col]--;
  56.      } else {
  57.        idx[col] = abc123.Length - 1;
  58.      }
  59.      escribe(col, Console.CursorTop, abc123[idx[col]].ToString());
  60.    } else {
  61.      escribiendo = true;
  62.      quitarFlechas();
  63.      Console.SetCursorPosition(0, 1);
  64.    }
  65.  }
  66.  
  67.  static void izquierda() {
  68.    if (escribiendo) {
  69.      if (Console.CursorLeft > 0) Console.CursorLeft--;
  70.    } else {
  71.      quitarFlechas();
  72.      escribe(0, 3, ">");
  73.    }
  74.  }
  75.  
  76.  static void derecha() {
  77.    if (escribiendo) {
  78.      if (Console.CursorLeft + 1 < 16) Console.CursorLeft++;
  79.    } else {
  80.      quitarFlechas();
  81.      escribe(10, 3, ">");
  82.    }
  83.  }
  84.  
  85.  static void escribe(int x, int y, String txt) {
  86.    Console.SetCursorPosition(x, y);
  87.    Console.Write(txt);
  88.    Console.CursorLeft--;
  89.  }
  90.  
  91.  static void enter() {
  92.    if (escribiendo) {
  93.      escribiendo = false;
  94.      izquierda();
  95.    } else {
  96.      if (Console.CursorLeft == 0 && Console.CursorTop == 3) {
  97.        Console.Clear();
  98.        Console.Write("Haz pulsado ATRAS");
  99.      }
  100.      if (Console.CursorLeft == 10 && Console.CursorTop == 3) {
  101.        foreach (int n in idx) nombre += abc123[n];
  102.        Console.Clear();
  103.        Console.Write("Se ha guardado\n[{0}]", nombre);
  104.      }
  105.      Console.Read();
  106.      fin = true;
  107.    }
  108.  }
  109.  
  110.  static void quitarFlechas() {
  111.    escribe(0, 3, " ");
  112.    escribe(10, 3, " ");
  113.  }
  114.  
  115. }


En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Seleccionar > en las opciones
« Respuesta #2 en: 1 Abril 2020, 16:14 pm »

Muy bueno.

Lo que no sabía la forma que esto se puede hacer como lo hiciste.
Código
  1. 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
  1.        static bool escribiendo = true, fin = false;
  2.        static ConsoleKey key;
  3.        static String nombre;
  4.        static readonly char[] abc123 = " ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789".ToCharArray();
  5.        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.  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Seleccionar una parte de un avi
Multimedia
kyokorn 1 1,688 Último mensaje 1 Diciembre 2004, 19:26 pm
por Songoku
Seleccionar un parrafo
Programación Visual Basic
Pox1 2 1,478 Último mensaje 26 Abril 2008, 16:55 pm
por cassiani
Seleccionar Ip's libres
PHP
FeArX 2 1,660 Último mensaje 11 Junio 2008, 20:49 pm
por FeArX
Menu opciones anti-batch injections. Permite hasta 10 opciones.
Scripting
carlitos.dll 0 2,883 Último mensaje 7 Octubre 2008, 08:21 am
por carlitos.dll
seleccionar en un MSHFlexgrid
Programación Visual Basic
deanelker 1 4,868 Último mensaje 21 Enero 2010, 17:43 pm
por ssccaann43 ©
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines