Me gustaría establecer la posición del cursor en la consola hasta la última línea visible. ¿Cómo puedo hacer esto?Consola C#: establecer la posición del cursor en la última línea visible
Saludos,
Pete
Me gustaría establecer la posición del cursor en la consola hasta la última línea visible. ¿Cómo puedo hacer esto?Consola C#: establecer la posición del cursor en la última línea visible
Saludos,
Pete
Si se refiere a la última línea de la ventana, se puede utilizar una mezcla de Console.CursorTop
y Console.WindowHeight
y Console.WindowTop
. Código de ejemplo:
using System;
class Test
{
static void Main()
{
Console.Write("Hello");
WriteOnBottomLine("Bottom!");
Console.WriteLine(" there");
}
static void WriteOnBottomLine(string text)
{
int x = Console.CursorLeft;
int y = Console.CursorTop;
Console.CursorTop = Console.WindowTop + Console.WindowHeight - 1;
Console.Write(text);
// Restore previous position
Console.SetCursorPosition(x, y);
}
}
Tenga en cuenta que esto tiene que tener en cuenta Console.WindowTop
para averiguar dónde se encuentra dentro de la memoria intermedia ...
Gracias, iba a escribir esto, pero estoy contento de haberlo buscado en Google. ¿Puedo sugerir que edite su función para mover el cursor a la izquierda = 0? Supongo que cualquiera que necesite escribir en la parte inferior de la pantalla probablemente también quiera escribir a la izquierda de la pantalla. – Sidney
@Sidney: ¿Quiere decir 'Console.CursorLeft = Console.WindowLeft'? (No tengo tiempo para probar esto en varias configuraciones en este momento). –
que también tuvo que resolver este problema y salió con esto:
public class Program
{
static int id = 0 , idOld = 0, idSelected = -1;
static string[] samples;
public static void Main()
{
Console.BackgroundColor = ConsoleColor.DarkBlue;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WindowWidth = 90;
Console.WindowHeight = 36;
Console.WindowTop = 5;
Console.Title = "My Samples Application";
Console.InputEncoding = Encoding.GetEncoding("windows-1251");
samples = new string[50];
for (int i = 0; i < samples.Length; i++)
samples[i] = "Sample" + i;
LoopSamples();
}
static void SelectRow(int y, bool select)
{
Console.CursorTop = y + 1;
Console.ForegroundColor = select ? ConsoleColor.Red : ConsoleColor.Yellow;
Console.WriteLine("\t{0}", samples[y]);
Console.CursorTop = y;
}
static void LoopSamples()
{
int last = samples.Length - 1;
ShowSamples();
SelectRow(0, true);
while (true)
{
while (idSelected == -1)
{
idOld = id;
ConsoleKey key = Console.ReadKey(true).Key;
switch (key)
{
case ConsoleKey.UpArrow:
case ConsoleKey.LeftArrow: if (--id < 0) id = last; break;
case ConsoleKey.DownArrow:
case ConsoleKey.RightArrow: if (++id > last) id = 0; break;
case ConsoleKey.Enter: idSelected = id; return;
case ConsoleKey.Escape: return;
}
SelectRow(idOld, false);
SelectRow(id, true);
}
}
}
static void ShowSamples()
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Use arrow keys to select a sample. Then press 'Enter'. Esc - to Quit");
for (int i = 0; i < samples.Length; i++)
Console.WriteLine("\t{0}", samples[i]);
}
}
Define 'última línea visible'. ¿Te refieres a la última línea de texto (el cursor debería ser su automáticamente) o en la parte inferior de la ventana visible, independientemente de qué texto exista? – AllenG
En la parte inferior de la ventana visible, independientemente de qué texto ya esté allí. – Peter