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


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 68
121  Programación / .NET (C#, VB.NET, ASP) / Calcular Litros de agua en portenje cambiando el valor de la altura en: 2 Julio 2020, 09:54 am
Lo tengo en unidades de metros.

Quiero calcular un cilindro como este, su volumen.


h = altura.
r = radio.
v = volumen.



Aquí hice un pequeño programa en la consola C# que calcula solo introduciendo dos valores, el radio del cilindro o depósito de agua y la altura.

Código
  1. using System;
  2.  
  3. namespace namespace_Calculo_cilindro_consola_02_cs
  4. {
  5.    class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            Console.Title = "Cálculo geométrico cilindro - C# 2019";
  10.            Console.SetWindowSize(50, 25);
  11.  
  12.            // Variables.
  13.            double Pi = 3.14;
  14.            double radio = 0;
  15.            double altura = 0;
  16.            double areaLateral = 0;
  17.            double areaTotal = 0;
  18.            double volumen = 0;
  19.            double litros = 0;
  20.  
  21.            Console.WriteLine("===== Área lateral =====");
  22.            Console.Write("Introduce el radio en m.: ");
  23.            radio = double.Parse(Console.ReadLine());
  24.            Console.Write("Introduce la altura en m.: ");
  25.            altura = double.Parse(Console.ReadLine());
  26.  
  27.            // Cálculo área lateral.
  28.            areaLateral = 2 * Pi * radio * altura;
  29.  
  30.            Console.WriteLine("Área lateral = 2 x Pi x radio x altura.");
  31.            Console.ForegroundColor = ConsoleColor.Green;
  32.            Console.WriteLine("Área lateral: {0} m^2. (Metros cuadrados). \n", areaLateral);
  33.  
  34.            Console.ForegroundColor = ConsoleColor.Gray;
  35.            Console.WriteLine("===== Área total =====");
  36.  
  37.            // Cálculo área Total.
  38.            areaTotal = areaLateral + 2 * (Pi * (radio * radio));
  39.  
  40.            Console.WriteLine("Área total = Áreal lateral + 2 x (Pi x r^2)");
  41.            Console.ForegroundColor = ConsoleColor.Yellow;
  42.            Console.WriteLine("Área total = {0} m^2. \n", areaTotal);
  43.  
  44.            Console.ForegroundColor = ConsoleColor.Gray;
  45.            Console.WriteLine("===== Volumen =====");
  46.            Console.WriteLine("Volumen = Pi x radio^2 x altura");
  47.  
  48.            // Cálculo volumen.
  49.            volumen = Pi * (radio * radio) * altura;
  50.  
  51.            Console.ForegroundColor = ConsoleColor.Cyan;
  52.            Console.WriteLine("Volumen = {0} m^3. (Metros cúbicos). \n", volumen);
  53.  
  54.            Console.ForegroundColor = ConsoleColor.Gray;
  55.            Console.WriteLine("===== Litros =====");
  56.            Console.WriteLine("Litros = Volumen * 1000");
  57.            Console.WriteLine("Litros = {0} m^3 * 1000", volumen);
  58.  
  59.            // Cálculo litros.
  60.            litros = volumen * 1000;
  61.  
  62.            Console.ForegroundColor = ConsoleColor.Red;
  63.            Console.WriteLine("Litros = {0}", litros + " L.\n");
  64.  
  65.            Console.ForegroundColor = ConsoleColor.Gray;
  66.            Console.WriteLine("FIN DE PROGRAMA. Pulse cualquier tecla para salir.");
  67.            // Pulse cualquier tecla para salir.
  68.            Console.ReadLine();
  69.        }
  70.    }
  71. }
  72.  



Me falta hacer una fórmula que no se hacer sobre saber que cantidad de litros tengo en este depósito de agua o cilindro. Por ejemplo, ya que la altura es de 0 a 2 metros, quiero saber que si cambio la altura del agua, por ejemplo que está a 0.7 metros, que me muestre el porcentaje en %. Está claro que si está el nivel del agua a 2 metros de altura que es la máxima, será el 100 %.

1. Si la altura está en 0.7 metros. ¿Qué porcentaje muestra?

2. ¿Qué cantidad de Litros de agua hay cuando está el nivel de agua a 0.7 metros?

Solo me falta saber estas dos cosas en papel. Luego lo transformo en C#.

Saludos.
122  Programación / Scripting / ¿CMD, PowerShell, Python es capaz de leer un archivo.dll de C++ nativo? en: 20 Junio 2020, 02:41 am
Buenos días compañeros.

No tengo idea de PowerShell. He creado una dll con Visual C++ nativo y a 64 bits. Hice un ejemplo con una interfaz de consola C# y me lee la dll de C++ nativo.

Dejo un ejemplo.

Código
  1. Código C#:
  2.  
  3. using System;
  4. using System.Runtime.InteropServices; // No olvidar.
  5.  
  6. namespace Consola_cs
  7. {
  8.    class Program
  9.    {
  10.        // Importar dll.
  11.        [DllImport("MyDLL.dll")]
  12.        extern static public int Suma(int a, int b);
  13.        [DllImport("MyDLL.dll")]
  14.        extern static public IntPtr Mensaje();
  15.  
  16.        static void Main()
  17.        {
  18.            // Título de la ventana.
  19.            Console.Title = "Consola C# 2019";
  20.  
  21.            // Tamaño de la ventana.
  22.            Console.SetWindowSize(40, 5);
  23.  
  24.            // Color de las letras.
  25.            Console.ForegroundColor = ConsoleColor.Green;
  26.  
  27.            // Llamando a la dll para mostrar un mensaje y una suma.
  28.            Console.WriteLine(Marshal.PtrToStringAuto(Mensaje()));
  29.            Console.WriteLine(Suma(1764, -764).ToString());
  30.  
  31.            // Pulse cualquier tecla para salir.
  32.            Console.ReadKey();
  33.        }
  34.    }
  35. }
  36.  

DLL hecho con C++:

Código
  1. // dllmain.cpp : Define el punto de entrada de la aplicación DLL.
  2. #include "pch.h"
  3.  
  4. BOOL APIENTRY DllMain( HMODULE hModule,
  5.                       DWORD  ul_reason_for_call,
  6.                       LPVOID lpReserved
  7.                     )
  8. {
  9.    switch (ul_reason_for_call)
  10.    {
  11.    case DLL_PROCESS_ATTACH:
  12.    case DLL_THREAD_ATTACH:
  13.    case DLL_THREAD_DETACH:
  14.    case DLL_PROCESS_DETACH:
  15.        break;
  16.    }
  17.    return TRUE;
  18. }
  19.  
  20. extern "C"
  21. {
  22.    __declspec(dllexport)  int WINAPI Suma(int, int);
  23.    __declspec(dllexport) LPTSTR WINAPI Mensaje();
  24. };
  25.  
  26. // Suma.
  27. int WINAPI Suma(int a, int b) { return a + b; }
  28.  
  29. // Mensaje.
  30. LPTSTR WINAPI Mensaje() { return LPTSTR(L"Hola. Soy una dll de C++ nativo."); }


El archivo dll que he creado se llama MyDLL.dll y quiero saber si PowerShell es capaz de leer las dll y que funciona. Esta dll solo hace una suma y muestra un mensaje en pantalla.

¿Es posible que PowerShell sea capaz de leer una dll?

Si es cierto. ¿Cómo se hace?

Un cordial saludos.
123  Programación / .NET (C#, VB.NET, ASP) / Incluye un tutorial y quiero saber que dll escoger del proyecto. en: 19 Junio 2020, 22:41 pm
Buenas:

Tengo un proyecto en el cual creé una dll, solo se actualiza una vez y está en esta dirección.
C:\Users\Meta\Documents\Visual Studio 2019\Projects\MyDLL\Debug\MyDLL.dll.

Lo curioso que cambié el texto de la dll para que me diga otra cosa, y la dirección de arriba no se actualiza pero es la dll que funciona. Se actualiza otra copia en otro directorio indicado abajo.
C:\Users\Meta\Documents\Visual Studio 2019\Projects\MyDLL\x64\Debug\MyDLL.dll.

Si uso esta dll llevándolo a la interfaz creada en la consola de C#, no funciona, me da este error.
Citar
System.BadImageFormatException: 'Se ha intentado cargar un programa con un formato incorrecto. (Excepción de HRESULT: 0x8007000B)'

Da igual que haga volver a compilar la dll, recopilar, limpiar  copilar de nuevo, nunca actualiza la dll que si funciona.

Dejo un tutorial en pdf de los pasos que he hecho para que entiendan lo que estoy diciendo, más bien, escribiendo.
Ver turorial en pdf.

Muchas gracias.
124  Programación / Programación C/C++ / Leer dll en consola win32 en: 18 Junio 2020, 10:27 am
Buenas:

Tengo un ejemplo en C# para leer una dll hecho en C++ Win32.

Código C#:

Código
  1. using System;
  2. using System.Runtime.InteropServices;
  3.  
  4. namespace Consola_cs
  5. {
  6.    class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            Console.WriteLine(Marshal.PtrToStringAuto(SUPER_DLL.Mensaje()));
  11.            Console.WriteLine(SUPER_DLL.Suma(1764, -764).ToString());
  12.  
  13.            // Pulse cualquier tecla para salir.
  14.            Console.ReadKey();
  15.        }
  16.        internal class SUPER_DLL
  17.        {
  18.            [DllImport("Super_dll.dll")]
  19.            extern static public int Suma(int a, int b);
  20.            [DllImport("Super_dll.dll")]
  21.            extern static public IntPtr Mensaje();
  22.        }
  23.    }
  24. }


Quiero adaptarlo la consola en Win32, pero me da errores.

Código C++ Win32:

Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. int main()
  5. {
  6.    std::cout << Marshal.PtrToStringAuto(SUPER_DLL.Mensaje());
  7.    std::cout << SUPER_DLL.Suma(1764, -764).ToString();
  8.  
  9.    // Esperando pulsar Enter para salir.
  10.    std::cin.get();
  11.    return 0;
  12. }
  13.  
  14. internal class SUPER_DLL
  15. {
  16.    [DllImport("Super_dll.dll")]
  17.    extern static public int Suma(int a, int b);
  18.    [DllImport("Super_dll.dll")]
  19.    extern static public IntPtr Mensaje();
  20. }
  21.  
Documento de aquí.


¿Alguna idea?

Saludos.
125  Programación / .NET (C#, VB.NET, ASP) / Corregir este programa en: 17 Junio 2020, 16:43 pm
Buenas gente del foro:

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

Aquí abajo, escribí todo a AAAAAAAAAAAAA.

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


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

El programa en esta parte se acaba ahí.

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

Muestra el mensaje: HAS GUARDADO y el nombre AAAAAAAAAAAAAAAA en pantalla.

Código completo en C#:
Código
  1. using System;
  2.  
  3. namespace LCD_nombre_archivo_consola_06
  4. {
  5.    class Program
  6.    {
  7.        static string guardarNombre = "";
  8.        static int coordenadaX = 0;
  9.        static ConsoleKey key;
  10.  
  11.        static readonly char[] roALFANUMERICO = new char[] {
  12.            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
  13.            'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
  14.            'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
  15.            'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
  16.            '¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '};
  17.  
  18.        static readonly int[] roINDICE_ARRAY = new int[] {
  19.            80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80 };
  20.  
  21.        private static readonly string[] roTEXTO = new string[] { "ATRÁS", "GUARDAR" };
  22.  
  23.        static int index = 0;
  24.        static void Main(string[] args)
  25.        {
  26.            // Título de la pantalla.
  27.            Console.Title = "Cambiar nombre";
  28.  
  29.            Inicio();
  30.        }
  31.  
  32.        #region Inico.
  33.        private static void Inicio()
  34.        {
  35.            // Tamaño de la ventana.
  36.            Console.SetWindowSize(20, 5);
  37.  
  38.            // Fondo verde.
  39.            Console.BackgroundColor = ConsoleColor.Blue;
  40.  
  41.            // Letras negras.
  42.            Console.ForegroundColor = ConsoleColor.White;
  43.  
  44.            // Limpiar pantalla.
  45.            Console.Clear();
  46.  
  47.            Console.SetCursorPosition(0, 0);
  48.            Console.Write("Nombre del relé 1:  ");
  49.            Console.SetCursorPosition(0, 1);
  50.            //Console.Write("AAAAAAAAAAAAAAAA");
  51.  
  52.            // Recorre todo el índice del array y el de los datos alfanumérico.
  53.            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
  54.            {
  55.                Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
  56.            }
  57.  
  58.            Console.SetCursorPosition(2, 3);
  59.            Console.Write(roTEXTO[0]); // ATRÁS.
  60.            Console.SetCursorPosition(12, 3);
  61.            Console.Write(roTEXTO[1]); // GUARDAR.
  62.  
  63.            while (true)
  64.            {
  65.                Console.SetCursorPosition(coordenadaX, 1);
  66.                key = Console.ReadKey(true).Key;
  67.                switch (key)
  68.                {
  69.                    case ConsoleKey.RightArrow:
  70.                        if (coordenadaX < 15)
  71.                            coordenadaX++;
  72.                        break;
  73.  
  74.                    case ConsoleKey.LeftArrow:
  75.                        if (coordenadaX > 0)
  76.                            coordenadaX--;
  77.                        break;
  78.  
  79.                    case ConsoleKey.UpArrow:
  80.                        roINDICE_ARRAY[coordenadaX]++;
  81.                        if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
  82.                        {
  83.                            roINDICE_ARRAY[coordenadaX] = 0;
  84.                        }
  85.                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
  86.                        break;
  87.  
  88.                    case ConsoleKey.DownArrow:
  89.                        roINDICE_ARRAY[coordenadaX]--;
  90.                        if (roINDICE_ARRAY[coordenadaX] < 0)
  91.                        {
  92.                            roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
  93.                        }
  94.                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
  95.                        break;
  96.  
  97.                    case ConsoleKey.Enter:
  98.                        Console.SetCursorPosition(1, 3);
  99.                        Console.Write(">");
  100.  
  101.                        while (true)
  102.                        {
  103.                            key = Console.ReadKey(true).Key;
  104.  
  105.                            switch (key)
  106.                            {
  107.                                case ConsoleKey.RightArrow:
  108.                                case ConsoleKey.LeftArrow:
  109.                                    index = 1 - index;
  110.                                    break;
  111.  
  112.                                case ConsoleKey.UpArrow:
  113.                                case ConsoleKey.DownArrow:
  114.                                    Console.SetCursorPosition(coordenadaX, 1);
  115.                                    break;
  116.  
  117.                                case ConsoleKey.Enter:
  118.  
  119.                                    break;
  120.                            }
  121.  
  122.                            for (int a = 0; a < 2; a++)
  123.                            {
  124.                                Console.SetCursorPosition(1 + (10 * a), 3);
  125.                                if (a == index)
  126.                                    Console.Write(">");
  127.                                else
  128.                                    Console.Write(" ");
  129.                            }
  130.  
  131.                            if (index == 0)  // se pulsó Atrás
  132.                            {
  133.                                Atras();
  134.                                //break;  // vuelve a la edición de letras
  135.                            }
  136.  
  137.                            if (index == 1)  // se pulsó Guardar
  138.                            {
  139.                                Guardar();
  140.                            }
  141.                        }
  142.                }
  143.            }
  144.        }
  145.        #endregion
  146.  
  147.        private static void Atras()
  148.        {
  149.            Console.Clear();
  150.            Console.SetCursorPosition(0, 1);
  151.            Console.Write("HAS PULSADO ATRÁS   ");
  152.            Console.ReadKey(); // Pulse cualquier tecla para salir.
  153.        }
  154.  
  155.        private static void Guardar()
  156.        {
  157.            Console.Clear();
  158.            Console.SetCursorPosition(0, 1);
  159.            Console.Write("HAS GUARDADO       ");
  160.            for (int a = 0; a < roINDICE_ARRAY.Length; a++)
  161.            {
  162.                guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
  163.            }
  164.            Console.SetCursorPosition(0, 2);
  165.            Console.Write(guardarNombre);
  166.        }
  167.    }
  168. }

¿Alguna idea?

Un saludo.
126  Programación / Scripting / Probando este código en: 17 Junio 2020, 15:55 pm
Buenas:

Tengo este código de Python 2.x. No me funciona en Visual Studio Community 2019 (Gratuito).

Código
  1. import os, sys, tkFileDialog,Tkinter
  2.  
  3. root = Tkinter.Tk()
  4. root.withdraw()
  5.  
  6. formats = [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]
  7.  
  8. input = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,title='Select file to swap bin HI to LO like A16->A15, A17->A16...A21->A20 and A15->21')
  9. if not input:
  10.        print "Error: Cannot open file"
  11.        sys.exit()
  12.  
  13. output = tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Create output file name')
  14. if not output:
  15.        print "Error: cannot create output file"
  16.        sys.exit()
  17.  
  18.  
  19. # reading input file to a byte array
  20. data = bytearray(input.read())
  21.  
  22. # calculating rom size in 2 exponants
  23. expsize = 0
  24. bytesize = len(data)
  25. while bytesize > 1:
  26.        expsize += 1
  27.        bytesize = bytesize // 2
  28.  
  29. # init a proper size empty bytearray
  30. buffer = bytearray()
  31. for i in range(2**expsize): buffer.append(0)
  32.  
  33. # let's do the swap
  34. count = 0
  35. for i in range(len(data)):
  36.        addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
  37.        if addr != i: count += 1
  38.        buffer[addr] = data[i]
  39. print "Swapped %s (%s) addresses" % (count, hex(count))
  40.  
  41. # writing output file
  42. output.write(buffer)
  43.  
  44. # close file handles
  45. input.close()
  46. output.close()

Me sale estos errores.
Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\__main__.py", line 45, in <module>
    cli.main()
  File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy/..\debugpy\server\cli.py", line 429, in main
    run()
  File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy/..\debugpy\server\cli.py", line 266, in run_file
    runpy.run_path(options.target, run_name=compat.force_str("__main__"))
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 261, in run_path
    code, fname = _get_code_from_file(run_name, path_name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 236, in _get_code_from_file
    code = compile(f.read(), fname, 'exec')
  File "C:\Users\Meta\Documents\Visual Studio 2019\Python_consola_01\Python_consola_01\Python_consola_01.py", line 10
    print "Error: Cannot open file"
                                  ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Error: Cannot open file")?
Press any key to continue . . .

¿Les dicen algo?

Saludos.
127  Programación / Programación C/C++ / Capturar tecla en: 16 Junio 2020, 13:49 pm
Buenas:

En C++ CLR para almacenar en una variable cualquier tecla pulsada de hace así indicado abajo.
Código:
 
// Almacena la tecla pulsada en la variable.
ConsoleKey teclaInicial;

¿Cómo se hace en C++ Win32?

Saludos.
128  Programación / .NET (C#, VB.NET, ASP) / ¿Cómo ocultar el cursor? en: 16 Junio 2020, 00:53 am
Buenas:

Trabajando con Win32 de C++ bajo Visual Studio Community 2019.

Cuando escriba Hola mundo. El cursor parpadea.

¿Hay alguna manera de quitarlo?

En C++ del CLR si se puede.

Código
  1. Console::CursorVisible = false;

En C++ Win32 no se como se hace.

Saludos.
129  Programación / .NET (C#, VB.NET, ASP) / Guardar en memoria el * en: 13 Junio 2020, 15:40 pm
Hola:

Aquí un programa hecho en consola, solo se usa las flechas del teclado y Enter.

Este programa se basa en radioButton, que en este caso funciona si selecciona una opción y pulsas Enter, se pone un asterisco. Hasta ahí bien.

Al pulsar Salir, luego Entrar, no se queda guardado el * en el último radioButton seleccionado.

¿Cómo se hace?

El código que tengo por ahora lo dejo aquí.

Código:
using System;

namespace radioButton_consola_02_cs
{
    class Program
    {
        #region Variables.
        private static readonly string[] TEXTO = new string[]
        {
            "( ) Opción A        ",
            "( ) Opción B        ",
            "( ) Opción C        ",
            "    SALIR"
        };
        #endregion

        static void Main(string[] args)
        {
            // Tamaño de la ventana.
            Console.SetWindowSize(20, 5);

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

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

            // Oculto el cursor.
            Console.CursorVisible = false;

            // Almacena la tecla pulsada en la variable.
            ConsoleKey teclaInicial;

            do
            {
                // Limpiar pantalla.
                Console.Clear();

                // Posición del cursor del título del MENÚ PRINCIPAL.
                Console.SetCursorPosition(0, 0);

                // Título.
                Console.Write("   MENÚ PRINCIPAL   ");

                // Pocisión de la hora.
                Console.SetCursorPosition(4, 2);

                // Formato numérico dd/MM/yyyy.
                Console.Write(DateTime.Now.ToString("ddd dd MMM"));

                // Almacena en la variable una tecla pulsada.
                teclaInicial = Console.ReadKey(true).Key;

                // ¿Haz pulsado la tecla Enter?
                if (teclaInicial == ConsoleKey.Enter)
                {
                    // Sí. Se ejecuta esta función.
                    MenuPrincipal();
                }
            } while (teclaInicial != ConsoleKey.Escape);

            #region Menú Principal.
            void MenuPrincipal()
            {
                bool salir = false;

                // En itemSelecionado:
                // -1 = Sin seleccionar con * ninguna opción.
                // 0 = Seleccionar con * la Opción A.
                // 1 = Seleccionar con * la Opción B.
                // 2 = Seleccionar con * la opción C.
                int itemSeleccionado = 0;
                int itemSeñalado = 0;

                // Capturar tecla para luego validar.
                ConsoleKey tecla;

                do
                {
                    //******************************************************************
                    // Dibujo el menú principal.

                    // Rellenar fondo verde.
                    //Console.BackgroundColor = ConsoleColor.Green;

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

                    // Limpiar pantalla.
                    Console.Clear();

                    for (int k = 0; k < TEXTO.Length; k++)
                    {
                        Console.SetCursorPosition(0, k);
                        Console.Write(itemSeñalado == k ? "> " : "  ");
                        Console.Write(TEXTO[k]);
                        Console.SetCursorPosition(3, k);
                        Console.Write(itemSeleccionado == k ? "*" : " ");
                    }

                    // Fin de pintar el menú principal.
                    //******************************************************************

                    // Leer tecla ingresada por el usuario.
                    tecla = Console.ReadKey(true).Key;

                    switch (tecla)
                    {
                        case ConsoleKey.Enter:
                            itemSeleccionado = itemSeñalado;
                            salir = (itemSeleccionado == TEXTO.Length - 1);
                            break;

                        case ConsoleKey.DownArrow:
                            if (++itemSeñalado >= TEXTO.Length)
                            {
                                itemSeñalado = 0;
                            }
                            break;

                        case ConsoleKey.UpArrow:
                            if (--itemSeñalado < 0)
                            {
                                itemSeñalado = TEXTO.Length - 1;
                            }
                            break;
                    }
                    // Uso la tecla escape como salida.
                } while (!salir);
            }
            #endregion
        }
    }
}

Saludos.
130  Programación / .NET (C#, VB.NET, ASP) / Corregir un fallo en: 11 Junio 2020, 12:33 pm
Buenas:



Usando el teclado solo las flechas y el Enter, en este programa puedo escribir nombre y se muestra en pantalla. Al escribir un nombre, pulso Enter y correctamente me lleva a la zona de > "Atrás". Si con la flecha derecha o izquierda me tiene que llevar a la parte de > Guardar.

El problema está que tiene que indicar con el caracter > en Guardar, y se ejecuta directamente, cosa que no debe ser. En la zona Atrás y Guardar solo se ejecuta si pulso Enter.

Dejo el código aquí como ejemplo.
Código
  1. using System;
  2.  
  3. namespace LCD_nombre_archivo_consola_03
  4. {
  5.    class Program
  6.    {
  7.        static string guardarNombre = "";
  8.        static int coordenadaX = 0;
  9.        static ConsoleKey key;
  10.  
  11.        static readonly char[] roALFANUMERICO = new char[] {
  12.            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
  13.            'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
  14.            'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
  15.            'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
  16.            '¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '};
  17.        static readonly int[] roINDICE_ARRAY = new int[] {
  18.            80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80 };
  19.        static readonly string[] TEXTO = new string[] { "ATRÁS", "GUARDAR" };
  20.        static int index = 0;
  21.        static void Main(string[] args)
  22.        {
  23.            // Título de la pantalla.
  24.            Console.Title = "Cambiar nombre";
  25.  
  26.            Inicio();
  27.        }
  28.  
  29.        #region Inico.
  30.        private static void Inicio()
  31.        {
  32.            // Tamaño de la ventana.
  33.            Console.SetWindowSize(20, 5);
  34.  
  35.            // Fondo verde.
  36.            Console.BackgroundColor = ConsoleColor.Blue;
  37.  
  38.            // Letras negras.
  39.            Console.ForegroundColor = ConsoleColor.White;
  40.  
  41.            Console.Clear();
  42.  
  43.            Console.SetCursorPosition(0, 0);
  44.            Console.Write("Nombre del relé 1:  ");
  45.            Console.SetCursorPosition(0, 1);
  46.            //Console.Write("AAAAAAAAAAAAAAAA");
  47.  
  48.            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
  49.            {
  50.                Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
  51.            }
  52.  
  53.            Console.SetCursorPosition(2, 3);
  54.            Console.Write(TEXTO[0]); // ATRÁS.
  55.            Console.SetCursorPosition(12, 3);
  56.            Console.Write(TEXTO[1]); // GUARDAR.
  57.  
  58.            while (true)
  59.            {
  60.                Console.SetCursorPosition(coordenadaX, 1);
  61.                key = Console.ReadKey(true).Key;
  62.                switch (key)
  63.                {
  64.                    case ConsoleKey.RightArrow:
  65.                        if (coordenadaX < 15)
  66.                            coordenadaX++;
  67.                        break;
  68.  
  69.                    case ConsoleKey.LeftArrow:
  70.                        if (coordenadaX > 0)
  71.                            coordenadaX--;
  72.                        break;
  73.  
  74.                    case ConsoleKey.UpArrow:
  75.                        roINDICE_ARRAY[coordenadaX]++;
  76.                        if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
  77.                        {
  78.                            roINDICE_ARRAY[coordenadaX] = 0;
  79.                        }
  80.                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
  81.                        break;
  82.  
  83.                    case ConsoleKey.DownArrow:
  84.                        roINDICE_ARRAY[coordenadaX]--;
  85.                        if (roINDICE_ARRAY[coordenadaX] < 0)
  86.                        {
  87.                            roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
  88.                        }
  89.                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
  90.                        break;
  91.  
  92.                    case ConsoleKey.Enter:
  93.                        Console.SetCursorPosition(1, 3);
  94.                        Console.Write(">");
  95.  
  96.                        while (true)
  97.                        {
  98.                            key = Console.ReadKey(true).Key;
  99.  
  100.                            switch (key)
  101.                            {
  102.                                case ConsoleKey.RightArrow:
  103.                                case ConsoleKey.LeftArrow:
  104.                                    index = 1 - index;
  105.                                    break;
  106.  
  107.                                case ConsoleKey.UpArrow:
  108.                                case ConsoleKey.DownArrow:
  109.                                    Console.SetCursorPosition(coordenadaX, 1);
  110.                                    break;
  111.  
  112.                                case ConsoleKey.Enter:
  113.  
  114.                                    break;
  115.                            }
  116.  
  117.                            for (int a = 0; a < 2; a++)
  118.                            {
  119.                                Console.SetCursorPosition(1 + (10 * a), 3);
  120.                                if (a == index)
  121.                                    Console.Write(">");
  122.                                else
  123.                                    Console.Write(" ");
  124.                            }
  125.  
  126.                            if (index == 0)  // se pulsó Atrás
  127.                            {
  128.                                Atras();
  129.                                //break;  // vuelve a la edición de letras
  130.                            }
  131.                            else if (index == 1)  // se pulsó Guardar
  132.                            {
  133.                                Guardar();
  134.                            }
  135.                        }
  136.                }
  137.            }
  138.        }
  139.        #endregion
  140.  
  141.        private static void Atras()
  142.        {
  143.            Console.Clear();
  144.            Console.SetCursorPosition(0, 1);
  145.            Console.Write("HAS PULSADO ATRÁS   ");
  146.            Console.ReadKey(); // Pulse cualquier tecla para salir.
  147.        }
  148.  
  149.        private static void Guardar()
  150.        {
  151.            Console.Clear();
  152.            Console.SetCursorPosition(0, 1);
  153.            Console.Write("HAS GUARDADO       ");
  154.            for (int a = 0; a < roINDICE_ARRAY.Length; a++)
  155.                guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
  156.            Console.SetCursorPosition(0, 2);
  157.            Console.Write(guardarNombre);
  158.        }
  159.    }
  160. }

Un cordial saludos.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 68
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines