2010-08-04 8 views
7

Ich möchte die Position des Cursors in der Konsole auf die letzte sichtbare Zeile setzen. Wie kann ich das machen?C# Konsole - setze die Cursorposition auf die letzte sichtbare Zeile

Cheers,

Pete

+1

Definieren Sie die letzte sichtbare Zeile. Meinst du die letzte Textzeile (der Cursor sollte automatisch sein) oder am unteren Rand des sichtbaren Fensters, unabhängig davon, welcher Text existiert? – AllenG

+0

Am unteren Rand des sichtbaren Fensters, unabhängig davon, welcher Text bereits vorhanden ist. – Peter

Antwort

14

Wenn Sie die letzte Zeile des Fensters bedeuten, können Sie eine Mischung aus Console.CursorTop und Console.WindowHeight und Console.WindowTop verwenden. Beispielcode:

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); 
    } 
} 

Beachten Sie, dass dieses Konto von Console.WindowTop nehmen muss, um herauszufinden, wo Sie innerhalb des Puffers sind ...

+0

Danke, ich wollte das nur schreiben, aber ich bin froh, dass ich es gegoogelt habe. Kann ich vorschlagen, Ihre Funktion zu bearbeiten, um den Cursor nach links = 0 zu bewegen? Ich gehe davon aus, dass jeder, der auf den unteren Bildschirmrand schreiben muss, wahrscheinlich auch auf der linken Seite des Bildschirms schreiben möchte. – Sidney

+0

@Sidney: Meinst du 'Console.CursorLeft = Console.WindowLeft'? (Ich habe momentan keine Zeit, dies in verschiedenen Konfigurationen zu testen.) –

1

Ich hatte auch dieses Problem zu lösen und kam mit dieser:

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]); 
    } 
} 
Verwandte Themen