Могу Утешить.Clear используется только для очистки строки, а не всей консоли?
во время работы над программой вопросов/ответов для школы, мне пришло в голову, что я могу использовать Console.Clear() чтобы стереть все на экране. Интересно, могу ли я использовать Console.Readline(valueOne), тогда выход только ответ без вопроса. Если бы я задал только один вопрос, то Console.Clear строительство.
у меня есть несколько вопросов со значениями не ссылки, чтобы стереть, если это возможно. Я хочу оставить вопросы и показать только несколько ответов. Я думаю, что если я храню ответы, я мог бы использовать Console.Clear() затем просто Console.WriteLine() С тремя переменными. Я мог бы сделать что-то вроде этого:
Console.WriteLine("Value 1 is: {0:c}" + "Value 2 is: {1:c}" + "Value 3 is: {2:c}, valueOne, valueTwo, valueThree).
проблема проще со ссылками, потому что значения хранятся и извлекаются. Если я просто использую методы для передачи по значению и вывода значения,main() не будет иметь ссылки на эти значения для очистки и вывода снова. Вот почему мне интересно, могу ли я просто задать вопрос, а затем стереть строку и вывести только ответ (или ответы).
Я просто пытаюсь понять возможности и не пытается настроить программу. Мне нравится знать возможности вывода значения из ссылки и по значению без дополнительных выходных вопросов.
9 ответов:
описание
можно использовать
Console.SetCursorPositionфункция для перехода к определенному номеру строки. Чем вы можете использовать эту функцию, чтобы очистить строкуpublic static void ClearCurrentConsoleLine() { int currentLineCursor = Console.CursorTop; Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, currentLineCursor); }пример
Console.WriteLine("Test"); Console.SetCursorPosition(0, Console.CursorTop - 1); ClearCurrentConsoleLine();Дополнительная Информация
простое и ИМХО лучшее решение таково:
Console.Write("\r" + new string(' ', Console.WindowWidth) + "\r");
это сработало для меня:
static void ClearLine(){ Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); }
" ClearCurrentConsoleLine"," ClearLine " и остальные вышеперечисленные функции должны использовать консоль.BufferWidth вместо консоли.WindowWidth (вы можете понять, почему, когда вы пытаетесь сделать окно поменьше). Размер окна консоли в настоящее время зависит от его буфера и не может быть шире его. Пример (Спасибо Дану Корнилеску):
public static void ClearLastLine() { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.BufferWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); }
мой предпочтительный метод-использовать PadRight. Вместо того, чтобы сначала очистить строку, это очищает оставшуюся часть строки после отображения нового текста, сохраняя шаг:
Console.CursorTop = 0; Console.CursorLeft = 0; Console.Write("Whatever...".PadRight(Console.BufferWidth));
не могли бы мы просто написать это в классе
public static void ClearLine() { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); }тогда в основном, просто введите
Console.WriteLine("Test"); ClearLine();Он отлично работает для меня ОО
очистить от текущей позиции до конца текущей строки, сделайте следующее:
public static void ClearToEndOfCurrentLine() { int currentLeft = Console.CursorLeft; int currentTop = Console.CursorTop; Console.Write(new String(' ', Console.WindowWidth - currentLeft)); Console.SetCursorPosition(currentLeft, currentTop); }
public static void ClearLine(int lines = 1) { for (int i = 1; i <= lines; i++) { Console.SetCursorPosition(0, Console.CursorTop - 1); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - 1); } }
Я думаю, что нашел, почему есть несколько различных ответов на этот вопрос. Когда окно было изменено таким образом, что оно имеет горизонтальную полосу прокрутки (потому что буфер больше, чем окно) консоли.CursorTop кажется, чтобы вернуться неправильную линию. Следующий код работает для меня, независимо от размера окна или позиции курсора.
public static void ClearLine() { Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new string(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop - (Console.WindowWidth >= Console.BufferWidth ? 1 : 0)); }без (приставка.WindowWidth >= Консоль.BufferWidth ? 1: 0), код может перемещать курсор вверх или вниз, в зависимости от версии вы используете с этой страницы и состояние окна.
Comments