2010-08-04 13 views
7

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

+1

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

+0

En la parte inferior de la ventana visible, independientemente de qué texto ya esté allí. – Peter

Respuesta

14

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 ...

+0

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

+0

@Sidney: ¿Quiere decir 'Console.CursorLeft = Console.WindowLeft'? (No tengo tiempo para probar esto en varias configuraciones en este momento). –

1

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]); 
    } 
} 
Cuestiones relacionadas