writeline online examples ejemplos application .net console

online - Advanced Console IO en.NET



system.console java (4)

¿Cuál es la mejor manera de escribir datos en la consola de texto en ubicaciones arbitrarias en la pantalla y con colores de fondo / fondo personalizados?


Console.SetCursorPosition, Console.BackgroundColor, Console.ForegroundColor y Console.ResetColor.

Tenga en cuenta que estos se agregaron a .NET Framework en la versión 2.0. Antes de eso, necesitarías PInvoke.


Según la Lista de bibliotecas mono, hay al menos dos bibliotecas que podrían ser útiles para usted:

  • Curses # usa PDCurses en Windows y NCurses en Linux. Es casi una plataforma cruzada en un nivel binario.

  • MonoCurses es un enlace de maldiciones con licencia MIT-X11 e incluye el kit de herramientas GUI minimalista gui.cs para crear aplicaciones basadas en consola.


Esta publicación muestra cómo usar los métodos de clase de consola para crear una barra de progreso en la consola; podría ser un buen ejemplo para referirse a ...


La función más efectiva es WriteConsoleOutput . Es una API win32 nativa, pero se puede usar en la aplicación .NET usando p / invoke:

[DllImport("kernel32.dll", SetLastError = true, EntryPoint = "WriteConsoleOutputW")] public static extern bool WriteConsoleOutput(IntPtr hConsoleOutput, CHAR_INFO[,] lpBuffer, COORD dwBufferSize, COORD dwBufferCoord, ref SMALL_RECT lpWriteRegion);

Donde CHAR_INFO es una estructura:

/// <summary> /// CharSet.Unicode is required for proper marshaling. /// </summary> [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)] public struct CHAR_INFO { [FieldOffset(0)] public char UnicodeChar; [FieldOffset(0)] public char AsciiChar; [FieldOffset(2)] //2 bytes seems to work properly public Attr Attributes; public override string ToString() { return string.Format("CHAR_INFO : ''{0}'' ({1})", AsciiChar, Attributes); } }

Estructura Attr:

/// <summary> /// CHAR_ATTRIBUTES native structure. /// </summary> [Flags] public enum Attr : ushort { NO_ATTRIBUTES = 0x0000, /// <summary> /// Text color contains blue. /// </summary> FOREGROUND_BLUE = 0x0001, /// <summary> /// Text color contains green. /// </summary> FOREGROUND_GREEN = 0x0002, /// <summary> /// Text color contains red. /// </summary> FOREGROUND_RED = 0x0004, /// <summary> /// Text color is intensified. /// </summary> FOREGROUND_INTENSITY = 0x0008, /// <summary> /// Background color contains blue. /// </summary> BACKGROUND_BLUE = 0x0010, /// <summary> /// Background color contains green. /// </summary> BACKGROUND_GREEN = 0x0020, /// <summary> /// Background color contains red. /// </summary> BACKGROUND_RED = 0x0040, /// <summary> /// Background color is intensified. /// </summary> BACKGROUND_INTENSITY = 0x0080, /// <summary> /// Leading byte. /// </summary> COMMON_LVB_LEADING_BYTE = 0x0100, /// <summary> /// Trailing byte. /// </summary> COMMON_LVB_TRAILING_BYTE = 0x0200, /// <summary> /// Top horizontal /// </summary> COMMON_LVB_GRID_HORIZONTAL = 0x0400, /// <summary> /// Left vertical. /// </summary> COMMON_LVB_GRID_LVERTICAL = 0x0800, /// <summary> /// Right vertical. /// </summary> COMMON_LVB_GRID_RVERTICAL = 0x1000, /// <summary> /// Reverse foreground and background attribute. /// </summary> COMMON_LVB_REVERSE_VIDEO = 0x4000, /// <summary> /// Underscore. /// </summary> COMMON_LVB_UNDERSCORE = 0x8000 }

COORD y SMALL_RECT:

[StructLayout(LayoutKind.Sequential)] public struct COORD { public short X; public short Y; public COORD(short X, short Y) { this.X = X; this.Y = Y; } }; [StructLayout(LayoutKind.Sequential)] public struct SMALL_RECT { public short Left; public short Top; public short Right; public short Bottom; public SMALL_RECT(short left, short top, short right, short bottom) { Left = left; Top = top; Right = right; Bottom = bottom; } }