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
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
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 ...
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
@Sidney: Meinst du 'Console.CursorLeft = Console.WindowLeft'? (Ich habe momentan keine Zeit, dies in verschiedenen Konfigurationen zu testen.) –
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]);
}
}
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
Am unteren Rand des sichtbaren Fensters, unabhängig davon, welcher Text bereits vorhanden ist. – Peter