Содержание
Всё окно консоли можно разделить на строки и столбцы, которые в совокупности представляют собой буфер консоли. То есть, условно, всё окно консольного приложения можно представить как сетку в каждой ячейке которой может помещаться ровно один символ. Мы можем управлять этим буфером, позволяя, например, помещать в строке окна консоли большее или меньшее количество символов. Сегодня разберем основные свойства класса Console для работы с буфером.
Ширина и высота буфера консоли
Чтобы получить или изменить размер ширины или высоты буфера консоли мы должны использовать два свойства: BufferWidth (ширина буфера в столбцах) и BufferHeight (высота буфера в строках). Значения этих свойств могут изменяться при изменении размера окна консоли. Рассмотрим следующий пример:
Console.WriteLine($"Ширина буферной области {Console.BufferWidth}");
Console.WriteLine($"Высота буферной области {Console.BufferHeight}");
Console.ReadKey();
Console.WriteLine($"Ширина буферной области {Console.BufferWidth}");
Console.WriteLine($"Высота буферной области {Console.BufferHeight}");
Запустим приложение, затем изменим размер окна и нажмем любую клавишу на клавиатуре. В итоге увидим два размера буфера консоли. Например, к меня получились следующие данные:
Высота буферной области 9001
Ширина буферной области 52
Высота буферной области 9001
Используя данные о размерах буфера можно организовать, например, вывод текста строго по центру окна. Рассмотрим следующий пример:
//количество строк буфера равно высоте окна консоли
Console.BufferHeight = Console.WindowTop + Console.WindowHeight;
int currTop = 7;
//устанавливаем курсор на седьмую строку
Console.CursorTop = currTop;
for (int i = 1; i < 11; i++)
{
Console.CursorLeft = (Console.BufferWidth - 20) / 2;
for (int j = 1; j < 11; j++)
{
Console.ForegroundColor = (ConsoleColor)i;
Console.Write($"{j-1} ");
Thread.Sleep(100);
}
currTop++;
Console.CursorTop = currTop;
Thread.Sleep(1000);
}
Здесь мы выводим квадрат из чисел от 0 до 9 по середине окна консоли. В результате можно увидеть вот такую красоту:
Если вы запустите приложение, то увидите, что числа появляются с некоторой задержкой. Для организации задержки мы использовали специальные метод:
Thread.Sleep(100);
который останавливает вывод на 100 мс или 1 секунду (Thread.Sleep(1000)).
Для управления положением курсора мы использовали свойства CursorLeft и CursorTop.
Итого
Для управления размером буфера консоли используются свойства BufferWidth (ширина буфера в столбцах) и BufferHeight (высота буфера в строках). Используя эти свойства мы можем организовать, например, вывод информации в строго заданном месте (по центру, с выравниванием слева, справа и т.д.).
