Вы можете сделать размер окна и размер буфера на 1 символ больше, чем ваша справочная область. Это позволяет записывать все символы, заполняющие область, не вызывая полос прокрутки.
Вы не указываете последний символ в позиции (w, h)
, иначе консоль будет прокручиваться. Затем используйте Console.MoveBufferArea () , чтобы скопировать символ в буфере в последнюю позицию. Этот метод просто использует буфер, он на самом деле не записывает в консоль, поэтому окно консоли не будет прокручиваться.
Замените символ, перемещенный функцией - на этот раз запись в консоль - и область заполнено полностью.
► В случае, если Консоль показывает , не связанное с размером буфера диапазоны : если вы не сделали этого раньше, откройте Свойства консоли из в меню консоли и выберите Discard old duplicates
в разделе Command History
панели Options
. Вы также можете сделать это, установив значение HKEY_CURRENT_USER\Console\HistoryNoDup
на 1
в реестре. Я обычно делаю это при запуске консольного приложения и повторно устанавливаю предыдущее значение при его закрытии (вам просто нужно установить его один раз - он находится в ветке текущего пользователя, права администратора не требуются).
Консоль MoveBufferArea
static void Main(string[] args)
{
DrawConsoleArea(50, 10, '#', false);
}
internal static void DrawConsoleArea(int width, int height, char chr, bool showCursor)
{
Console.CursorVisible = showCursor;
Console.SetWindowSize(width + 1, height + 1);
Console.SetBufferSize(width + 1, height + 1);
for (int i = 1; i < height; i++) {
Console.SetCursorPosition(0, i);
Console.Write(chr + new string(' ', width - 1) + chr);
}
Console.SetCursorPosition(0, 0);
Console.Write(new string(chr, width + 1));
Console.SetCursorPosition(0, height);
Console.Write(new string(chr, width));
Console.MoveBufferArea(0, 0, 1, 1, width, height);
Console.SetCursorPosition(0, 0);
Console.Write(chr);
}