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


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 261
21  Programación / .NET (C#, VB.NET, ASP) / Re: Salir de un void en: 30 Agosto 2024, 17:36 pm
Primero que nada, deberías repasar los fundamentos, porque te estás complicando mucho con cosas más bien triviales, además de que la sugerencia de quitar el bucle era tan disparatada, y tan obvio lo que iba a suceder, que no sé cómo se te ocurrió siquiera probarla.

En cuanto al problema, en general, si tienes una secuencia de llamadas de funciones tipo:

A  --> B --> C --> D

deberías intentar evitar que cualquiera de esas funciones llame a alguna de las anteriores (B no debería llamar a A, C no debería llamar ni a A ni a B, etc.). Si por ejemplo, estando en D, quieres volver al submenú anterior (C), la solución NO es llamar a C, sino simplemente dejar que D termine su ejecución, retornando de forma normal.

Muy bueno, si Señor.  ;D

Si también quieres que, por ejemplo, desde D o C sea posible volver al menú inicial (A), lo único que cambia es que estas funciones deberían devolver un valor que indique que se seleccionó la opción del menú principal. Suponiendo que sea un bool, lo que harías sería que cuando desde una función se desea volver al inicio, ésta termine con un return true (y en todos los demás casos, retornar false). Asimismo, todas las funciones, al invocar a otra, deberán verificar el valor que retorne, y si es true, deberán terminar su ejecución, devolviendo a su vez true, es decir, este valor se propaga a lo largo de la secuencia de llamadas, lo cual hará que termines volviendo al menú inicial de forma limpia.

Eso intentaba desde el principio, que vuelva de forma limpia, de cualquier proceso. Con los GOTO, que está muy mal visto por ser propenso a tener malas prácticas de programación, como no usa pila, solo etiquetas, iba hacer pruebas.

Hay más opciones de saltos según aquí.

https://learn.microsoft.com/es-es/dotnet/csharp/language-reference/statements/jump-statements

Para que todo esto funcione, tienes que cambiar tus funciones de manera que los menús se impriman dentro de los bucles.

Sigo cogiendo ideas. Me da igual empezar desde cero el programa aunque sea largo.


En cuanto a tu ejemplo del:

A  --> B --> C --> D

Pues si, me interesa estar en B, luego paso limpiamente a D, luego a A, luego a D otra vez, todo limpio, de eso se trata, ya que estoy trabajando como si fueran un Form llama a otro Form del que me de la gana dentro de un programa de Windows Form, que en este caso no hay problemas, en modo consola si hay si te despistas.


En cuanto al return, me imagino que te refieres que justo antes que acabe un void o función, tenga return true; o el return false;

Muchas gracias a todos por las aclaraciones.
22  Programación / .NET (C#, VB.NET, ASP) / Re: Salir de un void en: 30 Agosto 2024, 07:16 am
Entonces, cuando pulso atrás debo ir como indica abajo.

_0_Ajustes.AjustesPrincipal();

No ha acabado la función Volumen();

Ahí está el problema, debe terminar primero Volumen() para que no se quede ahí en la pila precisamente Volumen() cuando me estoy hiendo a otro void como en este caso _0_Ajustes.AjustesPrincipal();.

¿Alguna idea?
23  Programación / .NET (C#, VB.NET, ASP) / Re: Salir de un void [Ver vídeo] en: 29 Agosto 2024, 23:48 pm
En realidad infinita no, ya que si entro tres veces, debo salir tres veces para que luego el programa me funcione bien.

Estoy averiguando si es posible borrar la pila por mi mismo, no se si se puede hacer realmente.



Parece ser que si, voy a leer un poco más aquí.

https://csharp.com.es/la-pila-en-c-lifo-la-cola-lilo/

Gracias por los comentarios, les seguiré escribiendo.
24  Programación / .NET (C#, VB.NET, ASP) / Re: Salir de un void en: 29 Agosto 2024, 22:14 pm

Lo he hecho y se me va a la función ConfiguracionPrincipal() si pulso abajo o arriba. Si lo dejo si puedo elegir las opciones. Así que el programa se comporta diferente.

Lo dejé puesto otra vez.

Por lo que veo, hay que borrar la pila si es posible hacerlo, ya que al entrar en la función, no la termina, porque antes, me voy a otro menú que tiene otra función.

¿Es posible hacerlo?

Por lo que indica aquí en este vídeo, tiene que acabar toda la función, y en mi caso antes me voy a otro sin acabar el original, por eso pasa lo que pasa. Las Santas Pilas de llamadas que me tienen loco.



;)
25  Programación / .NET (C#, VB.NET, ASP) / Re: Salir de un void [Ver vídeo] en: 29 Agosto 2024, 20:41 pm
Lo he hecho, se crea pila de llamada.

Tal vez tenga que empezar desde cero, eso de llamar un void, dentro de otro void en C#, si no cierras ese void como debe ser, porque, me voy a otro void para arriba y para abajo...

Como no se cierra, se me desborda con el tiempo, de tanto usarlo, la pila de llamada.

Está claro que el problema es la pila de llamadas.

Por ejemplo, en este vídeo si entro y salgo de muchos void que suele ser cada ventana con sus funciones o sin ellas.



¿Cuál es la mejor forma de hacer un programa que por cada llamada void, es una ventana con funciones?
26  Programación / .NET (C#, VB.NET, ASP) / Salir de un void en: 28 Agosto 2024, 23:20 pm
Buenas:

A veces entro en una función void, como que se llama así mismo y el programa no funciona como debería.

En la pila de llamadas muestra esto.

Ver zoom.

Como puedes ver en la imagen en la Pila de llamadas, cada vez que intento salir del submenú, se repite cada vez más y en este caso hay tres, Volumen() y otras tres AjustesPrincipal(). Tiene que salir desde que salga, no que tenga comportamiento de este tipo.

Dejo código por si les dice algo en C# en modo consola.

Volumen();
Código
  1. //     ** VOLUMEN **
  2. //> Vol: ■■■■■■-- 6
  3. //
  4. //> ATRÁS    > INICIO
  5.  
  6. using LCD_Menu_con_submenus_Consola_03.Ventana01;
  7. using System;
  8.  
  9. namespace LCD_Menu_con_submenus_Consola_03.Ventana03
  10. {
  11.    public class _0_Volumen
  12.    {
  13.        static int volumen = 6;
  14.        public static void Volumen()
  15.        {
  16.            // Variables.
  17.            string[] TEXTO =
  18.            {
  19.                "   ** VOLUMEN **    ", // Posición 0.
  20.                " Vol: ",               // 1
  21.                "■",                    // 2
  22.                "-",                    // 3
  23.                "ATRÁS",                // 4
  24.                "INICIO",               // 5
  25.                ">",                    // 6
  26.                " "                     // 7
  27.            };
  28.  
  29.            const int VOLMEN_MAX = 8;
  30.            int opcion = 0; // 0 = Volumen, 1 = ATRÁS y 2 = INICIO.
  31.  
  32.            ConsoleKey teclaVolumen;
  33.  
  34.            // Limpiar pantalla.
  35.            Console.Clear();
  36.  
  37.            // Mostrar menú.
  38.            MostrarMenu();
  39.  
  40.            do
  41.            {
  42.                // ¿Están en la opción Volumen o 0?
  43.                if (opcion == 0)
  44.                {
  45.                    // Sí. Mostrar volumen.
  46.                    MostrarVolumen();
  47.                }
  48.  
  49.                // Captura tecla y lo guarda en la variable teclaVolumen.
  50.                teclaVolumen = Console.ReadKey(true).Key;
  51.  
  52.                // ¿Están en la opción Volumen o 0?
  53.  
  54.                if (opcion == 0)
  55.                {
  56.                    // Sí. Controlar el volumen.
  57.                    if ((teclaVolumen == ConsoleKey.RightArrow) && (volumen < VOLMEN_MAX))
  58.                    {
  59.                        volumen++;
  60.                    }
  61.                    else if ((teclaVolumen == ConsoleKey.LeftArrow) && (volumen > 0))
  62.                    {
  63.                        volumen--;
  64.                    }
  65.                    else if ((teclaVolumen == ConsoleKey.UpArrow) || (teclaVolumen == ConsoleKey.DownArrow))
  66.                    {
  67.                        opcion = 1; // 1 = ATRÁS.
  68.                    }
  69.                }
  70.                else // No. Mientras.
  71.                {
  72.                    // Navegar entre ATRÁS e INICIO.
  73.                    if ((teclaVolumen == ConsoleKey.LeftArrow) && (opcion == 2))
  74.                    {
  75.                        opcion = 1; // 1 = ATRÁS.
  76.                    }
  77.                    else if ((teclaVolumen == ConsoleKey.RightArrow) && (opcion == 1))
  78.                    {
  79.                        opcion = 2; // 2 = INICIO.
  80.                    }
  81.                    else if ((teclaVolumen == ConsoleKey.UpArrow) || (teclaVolumen == ConsoleKey.DownArrow))
  82.                    {
  83.                        opcion = 0; // 0 = Volumen.
  84.                    }
  85.                }
  86.  
  87.                // Mostrar menú.
  88.                MostrarMenu();
  89.  
  90.            } while (teclaVolumen != ConsoleKey.Enter || opcion == 0));
  91.  
  92.            // Acción al pulsar Enter.
  93.            if (opcion == 1)
  94.            {
  95.                // ATRÁS.
  96.                _0_Ajustes.AjustesPrincipal();
  97.            }
  98.            else if (opcion == 2)
  99.            {
  100.                // INICIO.
  101.                Inicio.InicioPrincipal();
  102.            }
  103.  
  104.            // Mostrar dibujado en pantalla.
  105.            void MostrarVolumen()
  106.            {
  107.                Console.SetCursorPosition(0, 0);
  108.                Console.Write(TEXTO[0]);           //    ** VOLUMEN **
  109.  
  110.                Console.SetCursorPosition(1, 1);
  111.                Console.Write(TEXTO[1]);           //   Vol:
  112.  
  113.                for (int i = 0; i < volumen; i++)
  114.                {
  115.                    Console.Write(TEXTO[2]);       // &#9632;
  116.                }
  117.  
  118.                for (int j = 0; j < (VOLMEN_MAX - volumen); j++)
  119.                {
  120.                    Console.Write(TEXTO[3]);       // -
  121.                }
  122.  
  123.                // Mostrar el volumen en número.
  124.                Console.SetCursorPosition(16, 1);
  125.                Console.Write(volumen);
  126.            }
  127.  
  128.            void MostrarMenu()
  129.            {
  130.                Console.SetCursorPosition(2, 3);
  131.                Console.Write(TEXTO[4]);           //   ATRÁS
  132.  
  133.                Console.SetCursorPosition(13, 3);
  134.                Console.Write(TEXTO[5]);           //   INICIO
  135.  
  136.                Console.SetCursorPosition(0, 1);
  137.                Console.Write(TEXTO[7]);           //
  138.                Console.SetCursorPosition(0, 3);
  139.                Console.Write(TEXTO[7]);           //
  140.                Console.SetCursorPosition(11, 3);
  141.                Console.Write(TEXTO[7]);           //
  142.  
  143.                // ¿Es 0 = Volumen?
  144.                if (opcion == 0)
  145.                {
  146.                    // Sí. Indica esta posición del cursor.
  147.                    Console.SetCursorPosition(0, 1);
  148.                }
  149.  
  150.                // No. Entonces, ¿ 1 = ATRÁS?
  151.                else if (opcion == 1)
  152.                {
  153.                    // Sí. Indica esta posición del cursor.
  154.                    Console.SetCursorPosition(0, 3);
  155.                }
  156.  
  157.                // No. Entonces, ¿2 = INICIO?
  158.                else if (opcion == 2)
  159.                {
  160.                    // Sí. Indica esta posición del cursor.
  161.                    Console.SetCursorPosition(11, 3);
  162.                }
  163.  
  164.                // Muestra el caracter >.
  165.                Console.Write(TEXTO[6]);  //   >
  166.            }
  167.        }
  168.    }
  169. }
  170.  

AjustesPrincipal():
Código
  1. //    ** AJUSTES **        
  2. // > Volumen.
  3. //   Brillo/Contraste  
  4. //   [x] Beep.
  5.  
  6. //    ** AJUSTES **        
  7. // > [x] Luz de fondo.
  8. //   ATRÁS
  9. //   INICIO
  10.  
  11. using LCD_Menu_con_submenus_Consola_03.Ventana03;
  12. using System;
  13.  
  14. namespace LCD_Menu_con_submenus_Consola_03.Ventana01
  15. {
  16.    public class _0_Ajustes
  17.    {
  18.        public static void AjustesPrincipal()
  19.        {
  20.            string[] TEXTO =
  21.            {
  22.                "   ** AJUSTES **    ", // Posición 0.
  23.                "  Volumen.          ", // 1
  24.                "  Brillo / Contraste", // 2
  25.                "  [ ] Beep          ", // 3
  26.                "  [ ] Luz de fondo. ", // 4
  27.                "  ATRÁS             ", // 5
  28.                "  INICIO            ", // 6
  29.                ">",                    // 7
  30.                "x",                    // 8
  31.                " "                     // 9
  32.            };
  33.  
  34.            // Contador de teclas y navegador.
  35.            sbyte indiceSeleccionado = 0;                   // Índice seleccionado de cada opción del menú.
  36.            bool salir = false;                             // Para salir del menú principal al INICIO.
  37.            const sbyte SELECCION_OPCIONES_TOTALES = 5;     // Total de opciones para seleccionar y fija.
  38.  
  39.            // Capturar tecla para luego validar.
  40.            ConsoleKey tecla;
  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]);         //     ** AJUSTES **    
  52.                        Console.SetCursorPosition(0, 1);
  53.                        Console.Write(TEXTO[1]);         // > Volumen.            
  54.                        Console.SetCursorPosition(0, 1);
  55.                        Console.Write(TEXTO[7]);         // >
  56.                        Console.SetCursorPosition(0, 2);
  57.                        Console.Write(TEXTO[2]);         //   Brillo / Contraste      
  58.                        Console.SetCursorPosition(0, 3);
  59.                        Console.Write(TEXTO[3]);         //   [ ] Beep.            
  60.                        break;
  61.  
  62.                    case 1:
  63.                        Console.SetCursorPosition(0, 0);
  64.                        Console.Write(TEXTO[0]);         //     ** AJUSTES **  
  65.                        Console.SetCursorPosition(0, 1);
  66.                        Console.Write(TEXTO[1]);         //   Volumen.  
  67.                        Console.SetCursorPosition(0, 2);
  68.                        Console.Write(TEXTO[2]);         // > Brillo / Contraste      
  69.                        Console.SetCursorPosition(0, 2);
  70.                        Console.Write(TEXTO[7]);         // >
  71.                        Console.SetCursorPosition(0, 3);
  72.                        Console.Write(TEXTO[3]);         //   [ ] Beep.  
  73.                        break;
  74.  
  75.                    case 2:
  76.                        Console.SetCursorPosition(0, 0);
  77.                        Console.Write(TEXTO[0]);         //     ** AJUSTES **  
  78.                        Console.SetCursorPosition(0, 1);
  79.                        Console.Write(TEXTO[1]);         //   Volumen.  
  80.                        Console.SetCursorPosition(0, 2);
  81.                        Console.Write(TEXTO[2]);         //   Brillo / Contraste      
  82.                        Console.SetCursorPosition(0, 3);
  83.                        Console.Write(TEXTO[3]);         // > [ ] Beep.  
  84.                        Console.SetCursorPosition(0, 3);
  85.                        Console.Write(TEXTO[7]);         // >
  86.                        break;
  87.  
  88.                    case 3:
  89.                        Console.SetCursorPosition(0, 0);
  90.                        Console.Write(TEXTO[0]);         //     ** AJUSTES **  
  91.                        Console.SetCursorPosition(0, 1);
  92.                        Console.Write(TEXTO[4]);         // >  [ ] Luz de fondo.
  93.                        Console.SetCursorPosition(0, 1);
  94.                        Console.Write(TEXTO[7]);         // >        
  95.                        Console.SetCursorPosition(0, 2);
  96.                        Console.Write(TEXTO[5]);         //    ATRÁS
  97.                        Console.SetCursorPosition(0, 3);
  98.                        Console.Write(TEXTO[6]);         //    INICIO
  99.                        break;
  100.  
  101.                    case 4:
  102.                        Console.SetCursorPosition(0, 0);
  103.                        Console.Write(TEXTO[0]);         //     ** AJUSTES **  
  104.                        Console.SetCursorPosition(0, 1);
  105.                        Console.Write(TEXTO[4]);         //   [ ] Luz de fondo.
  106.                        Console.SetCursorPosition(0, 2);
  107.                        Console.Write(TEXTO[5]);         // > ATRÁS      
  108.                        Console.SetCursorPosition(0, 2);
  109.                        Console.Write(TEXTO[7]);         // >
  110.                        Console.SetCursorPosition(0, 3);
  111.                        Console.Write(TEXTO[6]);         //    INICIO
  112.                        break;
  113.  
  114.                    case 5:
  115.                        Console.SetCursorPosition(0, 0);
  116.                        Console.Write(TEXTO[0]);         //     ** AJUSTES **  
  117.                        Console.SetCursorPosition(0, 1);
  118.                        Console.Write(TEXTO[4]);         //   [ ] Luz de fondo.
  119.                        Console.SetCursorPosition(0, 2);
  120.                        Console.Write(TEXTO[5]);         //   ATRÁS      
  121.                        Console.SetCursorPosition(0, 3);
  122.                        Console.Write(TEXTO[6]);         // > INICIO
  123.                        Console.SetCursorPosition(0, 3);
  124.                        Console.Write(TEXTO[7]);         // >
  125.                        break;
  126.  
  127.                    default:
  128.                        Console.Write("Fuera de rango.     ");
  129.                        break;
  130.                }
  131.  
  132.                // Fin de pintar el menú principal.
  133.                //******************************************************************
  134.  
  135.                // Leer tecla ingresada por el usuario.
  136.                tecla = Console.ReadKey(true).Key;
  137.  
  138.                // Validar el tipo de tecla.
  139.                if (tecla == ConsoleKey.Enter)
  140.                {
  141.                    switch (indiceSeleccionado)
  142.                    {
  143.                        case 0:
  144.                            _0_Volumen.Volumen();
  145.                            break;
  146.  
  147.                        case 1:
  148.  
  149.                            break;
  150.  
  151.                        case 2:
  152.  
  153.                            break;
  154.  
  155.                        case 3:
  156.  
  157.                            break;
  158.  
  159.                        case 4:
  160.                            salir = true;
  161.                            break;
  162.  
  163.                        case 5:
  164.                            Inicio.InicioPrincipal();
  165.                            break;
  166.  
  167.                        default:
  168.                            Console.Write("Fuera de rango.     ");
  169.                            break;
  170.                    }
  171.                }
  172.  
  173.                // ¿Has pulsado tecla flecha Abajo?
  174.                if (tecla == ConsoleKey.DownArrow)
  175.                {
  176.                    indiceSeleccionado++;
  177.                }
  178.  
  179.                // Entonces si pulsas tecla flecha Arriba.
  180.                if (tecla == ConsoleKey.UpArrow)
  181.                {
  182.                    indiceSeleccionado--;
  183.                }
  184.  
  185.                // Si está en la última opción, salta a la primera.
  186.                if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)
  187.                {
  188.                    indiceSeleccionado = 0;
  189.                }
  190.  
  191.                // Si está en la primera posición, salta a la última.
  192.                if (indiceSeleccionado < 0)
  193.                {
  194.                    indiceSeleccionado = SELECCION_OPCIONES_TOTALES;
  195.                }
  196.  
  197.                // Salida del menú.
  198.            } while (salir == false);
  199.        }
  200.    }
  201. }

Llevo tiempo sin resolver esto.

Espero que se entienda lo que quiero decir, si no, se lo explico con más capturas.

Muchas gracias.
27  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar y leer archivo de texto [SOLUCIONADO] en: 15 Agosto 2024, 12:21 pm
Ya me funciona. Lo dejo aquí por si alquien lo necesita o quiere curiosear.
Código
  1. using System;
  2. using System.IO;
  3.  
  4. namespace Pruebas_Opciones_Consola_02
  5. {
  6.    internal class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            #region Configuración ventana.
  11.            // Título de la ventana.
  12.            Console.Title = "Opciones";
  13.  
  14.            // Tamaño de la ventana, x, y o, ancho y alto.
  15.            const byte ANCHO_X = 20, ALTO_Y = 5;
  16.            Console.SetWindowSize(ANCHO_X, ALTO_Y);
  17.  
  18.            // Quitar scroll laterales. Derecho y abajo.
  19.            Console.SetBufferSize(ANCHO_X, ALTO_Y);
  20.  
  21.            // Color de fondo.
  22.            Console.BackgroundColor = ConsoleColor.Yellow;
  23.  
  24.            // Color de las letras.
  25.            Console.ForegroundColor = ConsoleColor.Black;
  26.  
  27.            // Limpiar pantalla y dejarlo todo en color de fondo.
  28.            Console.Clear();
  29.  
  30.            // Visible el cursor. // No! Así lo haces invisible.
  31.            Console.CursorVisible = false;
  32.            #endregion
  33.  
  34.            string[] opciones =
  35. {
  36.                    "    ** TÍTULO **    ",    // Posición 0.
  37.                    "  ( ) Opción A      ",    // 1
  38.                    "  ( ) Opción B      ",    // 2
  39.                    "  ( ) Opción C      ",    // 3
  40.                    "  SALIR             ",    // 4
  41.                    ">",                       // 5
  42.                    "x",                       // 6
  43.                    " ",                       // 7
  44.                    "                    "     // 8
  45.                };
  46.            string opA = "x";
  47.            string opB = " ";
  48.            string opC = " ";
  49.  
  50.            Menu();
  51.  
  52.            #region Opociones, selecciones y guardar archivo .txt
  53.            void OpcionesA()
  54.            {
  55.                Console.SetCursorPosition(0, 0);
  56.                Console.Write(opciones[0]);       //    ** TÍTULO **    
  57.                Console.SetCursorPosition(0, 1);
  58.                Console.Write(opciones[1]);       //   ( ) Opción A
  59.                Console.SetCursorPosition(0, 2);
  60.                Console.Write(opciones[2]);       //   ( ) Opción B
  61.                Console.SetCursorPosition(0, 3);
  62.                Console.Write(opciones[3]);       //   ( ) Opción C
  63.            }
  64.  
  65.            void OpcionesB()
  66.            {
  67.                Console.SetCursorPosition(0, 1);
  68.                Console.Write(opciones[4]);       //   SALIR
  69.                Console.SetCursorPosition(0, 2);
  70.                Console.Write(opciones[8]);       //  
  71.                Console.SetCursorPosition(0, 3);
  72.                Console.Write(opciones[8]);       //
  73.            }
  74.  
  75.            void SelectorA()
  76.            {
  77.                Console.SetCursorPosition(0, 1);
  78.                Console.Write(opciones[5]);       // >
  79.                Console.SetCursorPosition(0, 2);
  80.                Console.Write(opciones[7]);
  81.                Console.SetCursorPosition(0, 3);
  82.                Console.Write(opciones[7]);
  83.            }
  84.  
  85.            void SelectorB()
  86.            {
  87.                Console.SetCursorPosition(0, 1);
  88.                Console.Write(opciones[7]);
  89.                Console.SetCursorPosition(0, 2);
  90.                Console.Write(opciones[5]);       // >
  91.                Console.SetCursorPosition(0, 3);
  92.                Console.Write(opciones[7]);
  93.            }
  94.  
  95.            void SelectorC()
  96.            {
  97.                Console.SetCursorPosition(0, 1);
  98.                Console.Write(opciones[7]);
  99.                Console.SetCursorPosition(0, 2);
  100.                Console.Write(opciones[7]);
  101.                Console.SetCursorPosition(0, 3);
  102.                Console.Write(opciones[5]);        // >
  103.            }
  104.            #endregion
  105.  
  106.            void Menu()
  107.            {
  108.                sbyte indiceSeleccionado = 0;                // Índice seleccionado de cada opción del menú.
  109.                bool salir = false;                          // Para salir del menú principal al INICIO.
  110.                sbyte SELECCION_OPCIONES_TOTALES = 3;        // Total de opciones para seleccionar y fija.
  111.  
  112.                // Capturar tecla para luego validar.
  113.                ConsoleKey tecla;
  114.  
  115.                // Crear archivo y guarda el * seleccioinado en él.
  116.                if (File.Exists("Archivo.txt"))
  117.                {
  118.                    // Leer los datos separados
  119.                    string[] result = File.ReadAllText("Archivo.txt").Split(new char[] { ',' });
  120.                    opA = result[0];
  121.                    opB = result[1];
  122.                    opC = result[2];
  123.                }
  124.  
  125.                do
  126.                {
  127.                    //******************************************************************
  128.                    // Dibujo el menú principal.
  129.  
  130.                    switch (indiceSeleccionado)
  131.                    {
  132.                        case 0:
  133.                            OpcionesA();
  134.                            SelectorA();
  135.                            Console.SetCursorPosition(3, 1);
  136.                            Console.Write(opA);
  137.                            Console.SetCursorPosition(3, 2);
  138.                            Console.Write(opB);
  139.                            Console.SetCursorPosition(3, 3);
  140.                            Console.Write(opC);
  141.                            break;
  142.  
  143.                        case 1:
  144.                            OpcionesA();
  145.                            SelectorB();
  146.                            Console.SetCursorPosition(3, 1);
  147.                            Console.Write(opA);
  148.                            Console.SetCursorPosition(3, 2);
  149.                            Console.Write(opB);
  150.                            Console.SetCursorPosition(3, 3);
  151.                            Console.Write(opC);
  152.                            break;
  153.  
  154.                        case 2:
  155.                            OpcionesA();
  156.                            SelectorC();
  157.                            Console.SetCursorPosition(3, 1);
  158.                            Console.Write(opA);
  159.                            Console.SetCursorPosition(3, 2);
  160.                            Console.Write(opB);
  161.                            Console.SetCursorPosition(3, 3);
  162.                            Console.Write(opC);
  163.                            break;
  164.  
  165.                        case 3:
  166.                            OpcionesB();
  167.                            Console.SetCursorPosition(0, 1);
  168.                            Console.Write(opciones[5]);       // >
  169.                            break;
  170.                        default:
  171.                            Console.Write("Fuera de rango.     ");
  172.                            break;
  173.                    }
  174.  
  175.                    // Fin de pintar el menú principal.
  176.                    //******************************************************************
  177.  
  178.                    // Leer tecla ingresada por el usuario.
  179.                    tecla = Console.ReadKey(true).Key;
  180.  
  181.                    // Validar el tipo de tecla.
  182.                    if (tecla == ConsoleKey.Enter)
  183.                    {
  184.                        switch (indiceSeleccionado)
  185.                        {
  186.                            case 0:
  187.                                opA = "x"; opB = " "; opC = " ";
  188.                                break;
  189.  
  190.                            case 1:
  191.                                opA = " "; opB = "x"; opC = " ";
  192.                                break;
  193.  
  194.                            case 2:
  195.                                opA = " "; opB = " "; opC = "x";
  196.                                break;
  197.  
  198.                            case 3:
  199.                                indiceSeleccionado = 0; // Restaurar índice antes de salir.
  200.                                salir = true;           // Salir.
  201.                                break;
  202.  
  203.                            default:
  204.                                Console.Write("Fuera de rango.     ");
  205.                                break;
  206.                        }
  207.                        // Guardar en archivo solo después de actualizar la opción seleccionada.
  208.                        // Guardar los datos con separador.
  209.                        File.WriteAllText("Archivo.txt", string.Join(",", new string[] { opA, opB, opC }));
  210.                    }
  211.  
  212.                    // ¿Has pulsado tecla flecha Abajo?
  213.                    if (tecla == ConsoleKey.DownArrow)
  214.                    {
  215.                        indiceSeleccionado++;
  216.                    }
  217.  
  218.                    // Entonces si pulsas tecla flecha Arriba.
  219.                    if (tecla == ConsoleKey.UpArrow)
  220.                    {
  221.                        indiceSeleccionado--;
  222.                    }
  223.  
  224.                    // Si está en la última opción, salta a la primera.
  225.                    if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)
  226.                    {
  227.                        indiceSeleccionado = 0;
  228.                    }
  229.  
  230.                    // Si está en la primera posición, salta a la última.
  231.                    if (indiceSeleccionado < 0)
  232.                    {
  233.                        indiceSeleccionado = SELECCION_OPCIONES_TOTALES;
  234.                    }
  235.  
  236.                    // Uso la tecla escape como salida.
  237.                } while (!salir);
  238.            }
  239.        }
  240.    }
  241. }
28  Programación / .NET (C#, VB.NET, ASP) / Guardar y leer archivo de texto en: 8 Agosto 2024, 02:48 am
Buenas:



Usando C# en modo consola, se puede señalar con las flechas del teclado seleccionar alguna opción con esto >. Solo debe estar marcado con una x.

La idea es, al ejecutar el programa, si no encuentra el archivo.txt, lo cree y escribe la opción marcada con la x.

Al volver a ejecutar el programa, me indica la opción marcada que leyó en el archivo.txt.

Código que he hecho hasta ahora pero no lee, si lo crea es este:

Código
  1. using System;
  2. using System.IO;
  3.  
  4. namespace Pruebas_Opciones_Consola_02
  5. {
  6.    internal class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            #region Configuración ventana.
  11.            // Título de la ventana.
  12.            Console.Title = "Opciones";
  13.  
  14.            // Tamaño de la ventana, x, y o, ancho y alto.
  15.            const byte ancho = 20, alto = 5;
  16.            Console.SetWindowSize(ancho, alto);
  17.  
  18.            // Quitar scroll laterales. Derecho y abajo.
  19.            Console.SetBufferSize(ancho, alto);
  20.  
  21.            // Color de fondo.
  22.            Console.BackgroundColor = ConsoleColor.Yellow;
  23.  
  24.            // Color de las letras.
  25.            Console.ForegroundColor = ConsoleColor.Black;
  26.  
  27.            // Limpiar pantalla y dejarlo todo en color de fondo.
  28.            Console.Clear();
  29.  
  30.            // Visible el cursor. // No! Así lo haces invisible.
  31.            Console.CursorVisible = false;
  32.            #endregion
  33.  
  34.            string[] opciones =
  35. {
  36.                    "    ** TÍTULO **    ",    // Posición 0.
  37.                    "  ( ) Opción A      ",    // 1
  38.                    "  ( ) Opción B      ",    // 2
  39.                    "  ( ) Opción C      ",    // 3
  40.                    "  SALIR             ",    // 4
  41.                    ">",                       // 5
  42.                    "x",                       // 6
  43.                    " ",                       // 7
  44.                    "                    "     // 8
  45.                };
  46.  
  47.            // Cada vez que se vuelva al menú, está señalizado con la x.
  48.            int itemSeleccionado;
  49.  
  50.            Menu();
  51.  
  52.            #region Opociones, selecciones y guardar archivo .txt
  53.            void OpcionesA()
  54.            {
  55.                Console.SetCursorPosition(0, 0);
  56.                Console.Write(opciones[0]);       //    ** TÍTULO **    
  57.                Console.SetCursorPosition(0, 1);
  58.                Console.Write(opciones[1]);       //   ( ) Opción A
  59.                Console.SetCursorPosition(0, 2);
  60.                Console.Write(opciones[2]);       //   ( ) Opción B
  61.                Console.SetCursorPosition(0, 3);
  62.                Console.Write(opciones[3]);       //   ( ) Opción C
  63.            }
  64.  
  65.            void OpcionesB()
  66.            {
  67.                Console.SetCursorPosition(0, 1);
  68.                Console.Write(opciones[4]);       //   SALIR
  69.                Console.SetCursorPosition(0, 2);
  70.                Console.Write(opciones[8]);       //  
  71.                Console.SetCursorPosition(0, 3);
  72.                Console.Write(opciones[8]);       //
  73.            }
  74.  
  75.            void SelectorA()
  76.            {
  77.                Console.SetCursorPosition(0, 1);
  78.                Console.Write(opciones[5]);       // >
  79.                Console.SetCursorPosition(0, 2);
  80.                Console.Write(opciones[7]);
  81.                Console.SetCursorPosition(0, 3);
  82.                Console.Write(opciones[7]);
  83.            }
  84.  
  85.            void SelectorB()
  86.            {
  87.                Console.SetCursorPosition(0, 1);
  88.                Console.Write(opciones[7]);
  89.                Console.SetCursorPosition(0, 2);
  90.                Console.Write(opciones[5]);       // >
  91.                Console.SetCursorPosition(0, 3);
  92.                Console.Write(opciones[7]);
  93.            }
  94.  
  95.            void SelectorC()
  96.            {
  97.                Console.SetCursorPosition(0, 1);
  98.                Console.Write(opciones[7]);
  99.                Console.SetCursorPosition(0, 2);
  100.                Console.Write(opciones[7]);
  101.                Console.SetCursorPosition(0, 3);
  102.                Console.Write(opciones[5]);        // >
  103.            }
  104.            #endregion
  105.  
  106.            void Menu()
  107.            {
  108.                sbyte indiceSeleccionado = 0;                // Índice seleccionado de cada opción del menú.
  109.                bool salir = false;                          // Para salir del menú principal al INICIO.
  110.                sbyte SELECCION_OPCIONES_TOTALES = 3;        // Total de opciones para seleccionar y fija.
  111.  
  112.                string opA = "x";
  113.                string opB = " ";
  114.                string opC = " ";
  115.  
  116.                // Capturar tecla para luego validar.
  117.                ConsoleKey tecla;
  118.  
  119.                itemSeleccionado = 1;
  120.  
  121.                // Crear archivo y guarda el * seleccioinado en él.
  122.                if (File.Exists("Archivo.txt"))
  123.                {
  124.                    string data = File.ReadAllText("Archivo.txt");
  125.                    itemSeleccionado = Convert.ToInt32(data);
  126.                    //itemSeñalado = itemSeleccionado;
  127.                }
  128.  
  129.                do
  130.                {
  131.                    //******************************************************************
  132.                    // Dibujo el menú principal.
  133.  
  134.                    switch (indiceSeleccionado)
  135.                    {
  136.                        case 0:
  137.                            OpcionesA();
  138.                            SelectorA();
  139.                            Console.SetCursorPosition(3, 1);
  140.                            Console.Write(opA);
  141.                            Console.SetCursorPosition(3, 2);
  142.                            Console.Write(opB);
  143.                            Console.SetCursorPosition(3, 3);
  144.                            Console.Write(opC);
  145.                            break;
  146.  
  147.                        case 1:
  148.                            OpcionesA();
  149.                            SelectorB();
  150.                            Console.SetCursorPosition(3, 1);
  151.                            Console.Write(opA);
  152.                            Console.SetCursorPosition(3, 2);
  153.                            Console.Write(opB);
  154.                            Console.SetCursorPosition(3, 3);
  155.                            Console.Write(opC);
  156.                            break;
  157.  
  158.                        case 2:
  159.                            OpcionesA();
  160.                            SelectorC();
  161.                            Console.SetCursorPosition(3, 1);
  162.                            Console.Write(opA);
  163.                            Console.SetCursorPosition(3, 2);
  164.                            Console.Write(opB);
  165.                            Console.SetCursorPosition(3, 3);
  166.                            Console.Write(opC);
  167.                            break;
  168.  
  169.                        case 3:
  170.                            OpcionesB();
  171.                            Console.SetCursorPosition(0, 1);
  172.                            Console.Write(opciones[5]);       // >
  173.                            break;
  174.                        default:
  175.                            Console.Write("Fuera de rango.     ");
  176.                            break;
  177.                    }
  178.  
  179.                    // Fin de pintar el menú principal.
  180.                    //******************************************************************
  181.  
  182.                    // Leer tecla ingresada por el usuario.
  183.                    tecla = Console.ReadKey(true).Key;
  184.  
  185.                    // Validar el tipo de tecla.
  186.                    if (tecla == ConsoleKey.Enter)
  187.                    {
  188.                        switch (indiceSeleccionado)
  189.                        {
  190.                            case 0:
  191.                                opA = "x"; opB = " "; opC = " ";
  192.                                break;
  193.  
  194.                            case 1:
  195.                                opA = " "; opB = "x"; opC = " ";
  196.                                break;
  197.  
  198.                            case 2:
  199.                                opA = " "; opB = " "; opC = "x";
  200.                                break;
  201.  
  202.                            case 3:
  203.                                indiceSeleccionado = 0; // Restaurar índice antes de salir.
  204.                                salir = true;           // Salir.
  205.                                break;
  206.  
  207.                            default:
  208.                                Console.Write("Fuera de rango.     ");
  209.                                break;
  210.                        }
  211.                    }
  212.  
  213.                    // ¿Has pulsado tecla flecha Abajo?
  214.                    if (tecla == ConsoleKey.DownArrow)
  215.                    {
  216.                        indiceSeleccionado++;
  217.                    }
  218.  
  219.                    // Entonces si pulsas tecla flecha Arriba.
  220.                    if (tecla == ConsoleKey.UpArrow)
  221.                    {
  222.                        indiceSeleccionado--;
  223.                    }
  224.  
  225.                    // Si está en la última opción, salta a la primera.
  226.                    if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)
  227.                    {
  228.                        indiceSeleccionado = 0;
  229.                    }
  230.  
  231.                    // Si está en la primera posición, salta a la última.
  232.                    if (indiceSeleccionado < 0)
  233.                    {
  234.                        indiceSeleccionado = SELECCION_OPCIONES_TOTALES;
  235.                    }
  236.  
  237.                    // Uso la tecla escape como salida.
  238.                } while (!salir);
  239.            }
  240.        }
  241.    }
  242. }

El código es malo, fácil de entender, mientras funcione... todo bien.

Gracias.
29  Programación / .NET (C#, VB.NET, ASP) / Re: Cambiar resolución en pantalla en: 7 Agosto 2024, 07:06 am
Entendido. Muy buena explicación.


Gracias por la respuesta.  ;-)
30  Programación / .NET (C#, VB.NET, ASP) / Re: Cambiar resolución en pantalla en: 7 Agosto 2024, 02:32 am
¿Te refieres que no se puede codeando en C#?
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 261
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines