С# console, Console.Clear problem
Я пишу консольную программу на С#.
Есть ли способ, которым я могу использовать Console.Clear(), чтобы очищать определенные вещи на экране консоли?
Здесь моя проблема:
У меня есть логотип (я помещаю его на экран с помощью Console.WriteLine()) и 2d-массива, который я хочу сохранить постоянным и очистить все под ним.
Ответы
Ответ 1
Вы можете использовать специальный метод для очистки частей экрана...
static void Clear(int x, int y, int width, int height)
{
int curTop = Console.CursorTop;
int curLeft = Console.CursorLeft;
for (; height > 0;)
{
Console.SetCursorPosition(x, y + --height);
Console.Write(new string(' ',width));
}
Console.SetCursorPosition(curLeft, curTop);
}
Ответ 2
Изменить: ответ здесь показывает, как вы можете манипулировать консолью намного мощнее, чем я знал. То, что я изначально написал, все еще применяется и может быть полезно, если у вас нет доступных средств, возможно, на другом языке.
Сохраните логотип и изначально сгенерированное состояние массива, а затем, когда вы очистите консоль, снова запишите сохраненные значения, вместо того, чтобы использовать одну и ту же процедуру генерации.
Как говорили другие, консоль не предназначена для такого рода операций, поэтому вам придется ее обойти.
Другим вариантом может быть запись в строку или строковый конструктор, а не в консоль напрямую, а затем всякий раз, когда консоль нуждается в обновлении, очистите ее и напишите строку вывода/потока на консоль. Это позволит вам выполнять строковые операции/регулярные выражения и т.д. В тексте вывода, чтобы удалить/оставить определенные вещи на месте.
Однако это будет связано с большим количеством накладных расходов на консоль, так как вы в конечном итоге перепечатываете весь вывод при каждом обновлении.
Решение THAT может состоять в том, чтобы сохранить параллельное представление строки/потока того, что вы пишете на консоли, а затем, когда вам нужно очистить, вы можете очистить строковое представление, очистить консоль, а затем записать строку на консоль еще раз. Таким образом, вы добавили бы только операцию дополнительной записи в свою обычную запись, а основная дополнительная работа произошла только при очистке консоли.
Независимо от того, что вы делаете, запись на консоль никогда не является быстрой операцией, и если вы выполняете много операций, когда материал записывается в консоль, это может значительно повлиять на производительность вашего приложения.
Ответ 3
Можете ли вы не очистить, а затем переписать логотип и массив? Консоль не предназначена для использования при описании.