При работе над программой вопроса/ответа для школы мне пришло в голову, что я могу использовать 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()
не будет иметь ссылки на те значения, чтобы очистить и произвести снова. Вот почему интересно, могу ли я просто задать вопрос, затем стереть строку и произвести только ответ (или ответы).
Я просто пытаюсь понять возможности и не пытающийся установить программу. Мне нравится знать способности вывода значения из ссылки и значением без дополнительных вопросов о выводе.
Можно использовать эти 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();
[еще 116] информация Более простое и по моему скромному мнению лучшее решение:
Console.Write("\r" + new string(' ', Console.WindowWidth) + "\r");
Это использует возврат каретки для движения в начало строки, затем печатает столько пробелов, сколько консоль является шириной и возвращается к началу строки снова, таким образом, можно распечатать собственный тест впоследствии.
"ClearCurrentConsoleLine", "ClearLine" и остальная часть вышеупомянутых функций должны использовать Консоль. BufferWidth вместо Консоли. WindowWidth (Вы видите почему, когда Вы пытаетесь сделать окно меньшим). Размер окна консоли в настоящее время зависит ее буфера и не может быть более широким, чем она. Пример (спасибо переходит к Dan Cornilescu):
public static void ClearLastLine()
{
Console.SetCursorPosition(0, Console.CursorTop - 1);
Console.Write(new string(' ', Console.BufferWidth));
Console.SetCursorPosition(0, Console.CursorTop - 1);
}
Это работало на меня:
static void ClearLine(){
Console.SetCursorPosition(0, Console.CursorTop);
Console.Write(new string(' ', Console.WindowWidth));
Console.SetCursorPosition(0, Console.CursorTop - 1);
}
Мой предпочтительный метод состоит в том, чтобы использовать PadRight. Вместо того, чтобы очистить строку сначала, это очищает остаток от строки после того, как новый текст будет отображен, сохраняя шаг:
Console.CursorTop = 0;
Console.CursorLeft = 0;
Console.Write("Whatever...".PadRight(Console.BufferWidth));
Для очистки от текущей позиции в конец текущей строки сделайте это:
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()
{
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 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), код может или переместить курсор вверх или вниз, в зависимости от которой версии Вы используете от этой страницы и состояния окна.