Содержание
Всё окно консоли можно разделить на строки и столбцы, которые в совокупности представляют собой буфер консоли. То есть, условно, всё окно консольного приложения можно представить как сетку в каждой ячейке которой может помещаться ровно один символ. Мы можем управлять этим буфером, позволяя, например, помещать в строке окна консоли большее или меньшее количество символов. Сегодня разберем основные свойства класса 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
(высота буфера в строках). Используя эти свойства мы можем организовать, например, вывод информации в строго заданном месте (по центру, с выравниванием слева, справа и т.д.).