Как сохранить текст в верхней части консоли? - PullRequest
3 голосов
/ 11 февраля 2020

Я пытаюсь, чтобы мое консольное приложение автоматически прокручивалось, но текст оставался вверху. Текстовая история должна быть доступна, поэтому Console.Clear не является жизнеспособным.

Существует ли какой-либо метод для определения прокрутки консоли или любой метод для настройки текущей позиции Y, поскольку я знаю, что консоль будет прокручиваться, когда ваш текст собирается быть за кадром. Я хотел бы этот эффект, но сохранить самую новую строку в верхней части окна. Любая помощь приветствуется, спасибо!

1 Ответ

5 голосов
/ 11 февраля 2020

Вы можете использовать метод Console.SetWindowPosition(). *

Параметры
left Int32
Положение столбца в верхнем левом углу окна консоли.

top Int32
Положение строки в верхнем левом углу окна консоли.

Вот пример для демонстрации:

static void Main(string[] args)
{
    int i = 0;
    while (true)
    {
        Console.ReadKey(false);
        Console.WriteLine($"You are currently at line #{++i}");
        Console.SetWindowPosition(0, i - 1);
    }
}

Результат:

Scroll Console to Top

Обратите внимание, что если вы приближаетесь к значению Console.BufferHeight, вы можете получить ArgumentOutOfRangeException, то есть, когда новая позиция (верх) больше Console.BufferHeight - Console.WindowHeight, так что вы можете принять это во внимание. Я бы добавил простое условие для обработки этого случая. Пример:

int newTop = i - 1;
if (newTop + Console.WindowHeight <= Console.BufferHeight)
{
    Console.SetWindowPosition(0, newTop);
}

.. но вы, возможно, захотите обработать это по-другому (например, увеличьте буфер при go, измените размер окна и т. Д. c.)


* Не вводите в заблуждение название метода. «Окно» здесь не означает фактическое окно рабочего стола / консоли в терминах ОС (границы и т. Д. c.). Вместо этого это относится к текущему отображаемому окну буфера символов. Чтобы переместить фактическое окно консоли , вам нужно использовать функцию SetWindowPos Windows API. Пример .

...