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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Intentar diseñar bien
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Intentar diseñar bien  (Leído 3,065 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Intentar diseñar bien
« en: 30 Julio 2024, 01:11 am »

Buenas:

Como se aprecia esta imagen, está marcada la primera opción con una x.


Quiero hacer que nada más ejecutar el programa, se refleje esa x, ya que está simulando un radioButton en modo consola.

Si pulsas cualquiera de las tres opciones una x, las demás si tiene alguna, se quita, solo queda una sola seleccionada.

Al pulsar Enter por ejemplo > (x) Voltios, luego se me borra porque vuelve otra vez e redibujado principal.

Dejo aquí el código porque no se en que fallo. Lenguaje C#.
Código
  1. //      ** P1 **
  2. // > (x) %
  3. //   ( ) Voltios
  4. //   ( ) Decimal 0-1023
  5.  
  6. //      ** P1 **
  7. // > ATRÁS
  8. //   GUARDAR
  9.  
  10. using System;
  11.  
  12. namespace LCD_Menu_con_submenus_Consola_03.Ventana02
  13. {
  14.    public class _0_P1
  15.    {
  16.        #region Variables.
  17.        // Contador de teclas y navegador.
  18.        static sbyte indiceSeleccionado = 0;                   // Índice seleccionado de cada opción del menú.
  19.        static bool salir = false;                             // Para salir del menú principal al INICIO.
  20.        const sbyte SELECCION_OPCIONES_TOTALES = 3;            // Total de opciones para seleccionar y fija.
  21.  
  22.        public static readonly string[] TEXTO = new string[]
  23.        {
  24.            "      ** P1 **      ", // Posición 0.
  25.            "  ( ) %             ", // 1
  26.            "  ( ) Voltios       ", // 2
  27.            "  ( ) Decimal 0-1023", // 3
  28.            "  SALIR             ", // 4
  29.            "                    ", // 5
  30.            ">",                    // 6
  31.            "x"                     // 7
  32.        };
  33.        #endregion
  34.        public static void P1_Principal()
  35.        {
  36.            // Capturar tecla para luego validar.
  37.            ConsoleKey tecla;
  38.  
  39.            // Limpiar pantalla.
  40.            Console.Clear();
  41.  
  42.            do
  43.            {
  44.                //******************************************************************
  45.                // Dibujo el menú principal.
  46.  
  47.                switch (indiceSeleccionado)
  48.                {
  49.                    case 0:
  50.                        Console.SetCursorPosition(0, 0);
  51.                        Console.Write(TEXTO[0]);          //       ** P1 **
  52.                        Console.SetCursorPosition(0, 1);
  53.                        Console.Write(TEXTO[1]);          // > ( ) %              
  54.                        Console.SetCursorPosition(0, 1);
  55.                        Console.Write(TEXTO[6]);          // >
  56.                        Console.SetCursorPosition(0, 2);
  57.                        Console.Write(TEXTO[2]);          // ( ) Voltios
  58.                        Console.SetCursorPosition(0, 3);
  59.                        Console.Write(TEXTO[3]);          // ( ) Decimal 0-1023
  60.                        break;
  61.                    case 1:
  62.                        Console.SetCursorPosition(0, 0);
  63.                        Console.Write(TEXTO[0]);          //       ** P1 **
  64.                        Console.SetCursorPosition(0, 1);
  65.                        Console.Write(TEXTO[1]);          // ( ) %              
  66.                        Console.SetCursorPosition(0, 2);
  67.                        Console.Write(TEXTO[2]);          // > ( ) Voltios
  68.                        Console.SetCursorPosition(0, 2);
  69.                        Console.Write(TEXTO[6]);          // >
  70.                        Console.SetCursorPosition(0, 3);
  71.                        Console.Write(TEXTO[3]);          // ( ) Decimal 0-1023
  72.                        break;
  73.                    case 2:
  74.                        Console.SetCursorPosition(0, 0);
  75.                        Console.Write(TEXTO[0]);          //       ** P1 **
  76.                        Console.SetCursorPosition(0, 1);
  77.                        Console.Write(TEXTO[1]);          //  ( ) %              
  78.                        Console.SetCursorPosition(0, 2);
  79.                        Console.Write(TEXTO[2]);          //  ( ) Voltios
  80.                        Console.SetCursorPosition(0, 3);
  81.                        Console.Write(TEXTO[3]);          // > ( ) Decimal 0-1023
  82.                        Console.SetCursorPosition(0, 3);
  83.                        Console.Write(TEXTO[6]);          // >
  84.                        break;
  85.  
  86.                    case 3:
  87.                        Console.SetCursorPosition(0, 0);
  88.                        Console.Write(TEXTO[0]);          //       ** P1 **
  89.                        Console.SetCursorPosition(0, 1);
  90.                        Console.Write(TEXTO[4]);          // > SALIR              
  91.                        Console.SetCursorPosition(0, 1);
  92.                        Console.Write(TEXTO[6]);          // >
  93.                        Console.SetCursorPosition(0, 2);
  94.                        Console.Write(TEXTO[5]);          //
  95.                        Console.SetCursorPosition(0, 3);
  96.                        Console.Write(TEXTO[5]);          //
  97.                        break;
  98.  
  99.                    default:
  100.                        Console.Write("Fuera de rango.     ");
  101.                        break;
  102.                }
  103.  
  104.                // Fin de pintar el menú principal.
  105.                //******************************************************************
  106.  
  107.                // Leer tecla ingresada por el usuario.
  108.                tecla = Console.ReadKey(true).Key;
  109.  
  110.                // Validar el tipo de tecla.
  111.                if (tecla == ConsoleKey.Enter)
  112.                {
  113.                    switch (indiceSeleccionado)
  114.                    {
  115.                        case 0:
  116.                            Console.SetCursorPosition(3, 1);
  117.                            Console.Write(TEXTO[7]);          // x
  118.                            break;
  119.  
  120.                        case 1:
  121.                            Console.SetCursorPosition(3, 2);
  122.                            Console.Write(TEXTO[7]);          // x
  123.                            break;
  124.  
  125.                        case 2:
  126.                            Console.SetCursorPosition(3, 3);
  127.                            Console.Write(TEXTO[7]);          // x
  128.                            break;
  129.  
  130.                        case 3:
  131.                            salir = true; // Salir
  132.                            break;
  133.  
  134.                        default:
  135.                            Console.Write("Fuera de rango.     ");
  136.                            break;
  137.                    }
  138.                }
  139.  
  140.                // ¿Has pulsado tecla flecha Abajo?
  141.                else if (tecla == ConsoleKey.DownArrow)
  142.                {
  143.                    indiceSeleccionado++;
  144.                }
  145.  
  146.                // Entonces si pulsas tecla flecha Arriba.
  147.                else if (tecla == ConsoleKey.UpArrow)
  148.                {
  149.                    indiceSeleccionado--;
  150.                }
  151.  
  152.                // Si está en la última opción, salta a la primera.
  153.                if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)
  154.                {
  155.                    indiceSeleccionado = 0;
  156.                }
  157.  
  158.                // Si está en la primera posición, salta a la última.
  159.                if (indiceSeleccionado < 0)
  160.                {
  161.                    indiceSeleccionado = SELECCION_OPCIONES_TOTALES;
  162.                }
  163.  
  164.                // Uso la tecla escape como salida.
  165.            } while (!salir);
  166.        }
  167.    }
  168. }

Saludos.


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.162



Ver Perfil
Re: Intentar diseñar bien
« Respuesta #1 en: 30 Julio 2024, 04:07 am »

Si quieres imitar el comportamiento de un RadioButton de forma sencilla estaría demás presionar Enter, con presionar las Flechas ya debería hacer todo el trabajo, salvo que quieras imitar el comportamiento de los CheckBox que al ser multiselección se hace necesario presionar Enter para decirle que checks marcar.

En todo caso el Enter ya estaría destinado a ejecutar la acción final con la elección especificada:

Código
  1. using System;
  2.  
  3. namespace RadioButton {
  4.  class Program {
  5.    static void Main(string[] args) {
  6.      ConsoleKey key;
  7.      Console.CursorVisible = false;
  8.      Console.SetWindowSize(44, 5);
  9.      Console.SetBufferSize(44, 5);
  10.      imprimeMenu(1);
  11.  
  12.      do {
  13.        key = Console.ReadKey(true).Key;
  14.        if (key == ConsoleKey.UpArrow && Console.CursorTop > 1)
  15.          imprimeMenu(--Console.CursorTop);
  16.        if (key == ConsoleKey.DownArrow && Console.CursorTop < 3)
  17.          imprimeMenu(++Console.CursorTop);
  18.        if (key == ConsoleKey.Enter)
  19.          enter(Console.CursorTop);
  20.      } while (key != ConsoleKey.Escape);
  21.  
  22.    }
  23.  
  24.    static void imprimeMenu(int posX) {
  25.      Console.Clear();
  26.      Console.WriteLine("      ** P1 **      ");
  27.      Console.WriteLine("  ( ) %             ");
  28.      Console.WriteLine("  ( ) Voltios       ");
  29.      Console.WriteLine("  ( ) Decimal 0-1023");
  30.      Console.SetCursorPosition(0, posX);
  31.      Console.Write("> (x)");
  32.    }
  33.  
  34.    static void enter(int opcion) {
  35.      Console.Clear();
  36.      Console.WriteLine("Usted a elegido la opción número {0}", opcion);
  37.      Console.WriteLine("Presione cualquier tecla para continuar ...");
  38.      Console.ReadKey(true);
  39.      imprimeMenu(opcion);
  40.    }
  41.  }
  42. }
  43.  



En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Intentar diseñar bien
« Respuesta #2 en: 30 Julio 2024, 04:26 am »

Me funciona tu código, se pone la x justo cuando paso la >, no lo quiero así, sino, poder mover el > y solo cuando pulse enter en una opción indicada, aparece la X o no.

Si hacer una flecha abajo más, se pone otra opción que se llama Salir.

Gracias.
« Última modificación: 30 Julio 2024, 04:29 am por Meta » En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.162



Ver Perfil
Re: Intentar diseñar bien
« Respuesta #3 en: 30 Julio 2024, 16:41 pm »

Haber, que tal esta aproximación:

Código
  1. using System;
  2.  
  3. namespace RadioButton {
  4.  class Program {
  5.    static void Main(string[] args) {
  6.      ConsoleKey key;
  7.      int posX = 0; //Posición de la x
  8.      Console.CursorVisible = false;
  9.      Console.SetWindowSize(44, 5);
  10.      Console.SetBufferSize(44, 5);
  11.      imprimeMenu(1, posX); // imprimeMenu(posición de la flecha >, posición de la x)
  12.  
  13.      do {
  14.        key = Console.ReadKey(true).Key;
  15.        if (key == ConsoleKey.UpArrow && Console.CursorTop > 1)
  16.          imprimeMenu(--Console.CursorTop, posX);
  17.        if (key == ConsoleKey.DownArrow && Console.CursorTop < 4)
  18.          imprimeMenu(++Console.CursorTop, posX);
  19.        if (key == ConsoleKey.Enter) {
  20.          if (Console.CursorTop != 4) {
  21.            posX = Console.CursorTop;
  22.            imprimeMenu(Console.CursorTop, posX);
  23.          } else {
  24.            salir(posX);
  25.            imprimeMenu(Console.CursorTop, posX);
  26.          }
  27.        }
  28.  
  29.      } while (key != ConsoleKey.Escape);
  30.  
  31.    }
  32.  
  33.    static void imprimeMenu(int posF, int posX) {
  34.      Console.Clear();
  35.      Console.WriteLine("      ** P1 **      ");
  36.      Console.WriteLine("  ( ) %             ");
  37.      Console.WriteLine("  ( ) Voltios       ");
  38.      Console.WriteLine("  ( ) Decimal 0-1023");
  39.      if (posF == 4) Console.Write("  Salir");
  40.      if (posX != 0) {
  41.        Console.SetCursorPosition(3, posX);
  42.        Console.Write("x");
  43.      }
  44.      Console.SetCursorPosition(0, posF);
  45.      Console.Write(">");
  46.    }
  47.  
  48.    static void salir(int opcion) {
  49.      Console.Clear();
  50.      Console.WriteLine("Usted a elegido la opción número {0}", opcion);
  51.      Console.WriteLine("Presione cualquier tecla para continuar ...");
  52.      Console.ReadKey(true);
  53.    }
  54.  }
  55. }
  56.  

En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Intentar diseñar bien
« Respuesta #4 en: 31 Julio 2024, 00:45 am »

Muy bueno, sí señor.  ;-) ;-) ;-) ;-) ;-)

Muchas gracias mi muy distinguido amigo.  ;D
En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Intentar diseñar bien
« Respuesta #5 en: 2 Agosto 2024, 01:16 am »

Por cierto, este código.

Código
  1.      Console.SetWindowSize(44, 5);
  2.      Console.SetBufferSize(44, 5);

Sobre todo este:
Código
  1. Console.SetBufferSize(44, 5);

¿Qué utilidad tiene?

Lo incluya en el código o no, no veo ningún efecto o utilidad.

En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.162



Ver Perfil
Re: Intentar diseñar bien
« Respuesta #6 en: 2 Agosto 2024, 01:31 am »

La consola (símbolo del sistema) tiene dos tamaños, comparándolo con un documento de Word el WindowSize es el tamaño de la ventana de Word y BufferSize es el tamaño de la hoja, pero hay una restricción: el tamaño de la hoja no puede ser menor al de la ventana.

WindowSize se utiliza para dar tamaño a la ventana, y BufferSize se utiliza para dar tamaño al contenido de la consola, si hay más contenido aunque sea vació habrá más para desplazar con las barras de desplazamiento

Normalmente para que no hayan barras de desplazamiento se usa un WindowSize igual a la cantidad de letras en horizontal deseada +1, y también la cantidad de líneas +1, entonces se pone igual el BufferSize. Siempre se requiere ese +1 porque la consola funciona así, con ese margen a la derecha de mínimo 1 y margen inferior de mínimo 1
En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.838


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Intentar diseñar bien
« Respuesta #7 en: 2 Agosto 2024, 01:37 am »

Hola, es para establecer el alto y ancho del área del buffer de la consola con los valores especificados:

Código
  1. Console.SetBufferSize(Ancho, Alto);

básicamente esos valores son los caracteres/líneas que pueden entrar como máximo en la ventana.

Más información https://learn.microsoft.com/en-us/dotnet/api/system.console.setbuffersize?view=net-8.0



Saludos
« Última modificación: 2 Agosto 2024, 01:40 am por Danielㅤ » En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Intentar diseñar bien
« Respuesta #8 en: 2 Agosto 2024, 07:18 am »

Gracias compañeros.

Ya me di cuenta, si lo quitas, aparece al lado para bajar y subir las líneas en la derecha como una Web, si lo pones, no aparece.
En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Intentar diseñar bien
« Respuesta #9 en: 6 Agosto 2024, 22:32 pm »

Quiero mejorar un poco el código. Que muestre Salir como en otra pantalla. Por ejemplo.



Con la feclas del teclado terminaré por llegar en la otra pantalla indicada abajo.


Desde que pulse SALIR, el programa se termina.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Diseñar tipografia
Diseño Gráfico
H@T 5 3,277 Último mensaje 12 Enero 2006, 00:12 am
por Maox
aprender crear y diseñar web
Desarrollo Web
swagger14 1 2,081 Último mensaje 8 Octubre 2012, 08:26 am
por WarGhost
como diseñar troyanos?
Análisis y Diseño de Malware
anonymous07 1 4,281 Último mensaje 5 Febrero 2015, 22:07 pm
por skapunky
Diseñar tu propia luz de Led.
Electrónica
Meta 1 3,511 Último mensaje 2 Febrero 2017, 00:26 am
por H30
Pido disculpas por intentar hacer estas cosas de hackear! Eso no está bien!
Hacking Wireless
win_7 7 7,695 Último mensaje 26 Mayo 2021, 16:47 pm
por el-brujo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines