2010-08-04 56 views
7

我想將控制檯中光標的位置設置爲最後一個可見行。我怎樣才能做到這一點?C#控制檯 - 將光標位置設置爲最後一個可見行

乾杯,

皮特

+1

定義'最後可見行'。你的意思是文本的最後一行(光標應該是它們的自動)還是在可見窗口的底部,而不管文字是否存在? – AllenG 2010-08-04 16:19:39

+0

在可見窗口的底部,不管文字已經存在。 – Peter 2010-08-04 21:53:30

回答

14

如果你指的是窗口的最後一行,則可以使用的Console.CursorTop,並且Console.WindowHeightConsole.WindowTop的混合物。示例代碼:

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

注意,這必須考慮的Console.WindowTop找出你在哪裏,在緩衝區內...

+0

謝謝,我只是寫這個,但我很高興我GOOGLE了。我可以建議編輯你的功能將光標移動到左邊= 0嗎?我假設任何需要寫入屏幕底部的人可能也想寫在屏幕的左側。 – Sidney 2015-09-11 19:57:20

+0

@Sidney:你的意思是'Console.CursorLeft = Console.WindowLeft'? (我目前沒有時間在各種配置中進行測試。) – 2015-09-12 12:07:35

1

我也不得不解決這個問題,並與該出來了:

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