Может ли Console.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() не будет ссылаться на эти значения для очистки и вывода снова. Вот почему я задаюсь вопросом, могу ли я просто задать вопрос, а затем удалить строку и вывести только ответ (или ответы).

Я просто пытаюсь понять возможности и не пытаюсь настроить программу. Мне нравится знать возможности вывода значения из ссылки и значения без дополнительных вопросов вывода.

Ответ 1

Описание

Вы можете использовать функцию 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();

Дополнительная информация

Ответ 2

Простое и лучшее решение:

Console.Write("\r" + new string(' ', Console.WindowWidth) + "\r");

Ответ 3

Это сработало для меня:

static void ClearLine(){
    Console.SetCursorPosition(0, Console.CursorTop);
    Console.Write(new string(' ', Console.WindowWidth)); 
    Console.SetCursorPosition(0, Console.CursorTop - 1);
}

Ответ 4

"ClearCurrentConsoleLine", "ClearLine" и остальные функции должны использовать Console.BufferWidth вместо Console.WindowWidth(вы можете понять, почему, когда вы пытаетесь сделать окно меньше). Размер окна консоли в настоящее время зависит от его буфера и не может быть шире, чем он. Пример (спасибо Дэну Корнилеску):

public static void ClearLastLine()
{
    Console.SetCursorPosition(0, Console.CursorTop - 1);
    Console.Write(new string(' ', Console.BufferWidth));
    Console.SetCursorPosition(0, Console.CursorTop - 1);
}

Ответ 5

Мой предпочтительный метод - использовать PadRight. Вместо того, чтобы сначала очистить строку, это очищает оставшуюся часть строки после отображения нового текста, сохраняя шаг:

Console.CursorTop = 0;
Console.CursorLeft = 0;
Console.Write("Whatever...".PadRight(Console.BufferWidth));

Ответ 6

Нельзя ли просто написать это в классе

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();

Это отлично работает для меня oo

Ответ 7

Чтобы очистить текущую позицию до конца текущей строки, сделайте следующее:

    public static void ClearToEndOfCurrentLine()
    {
        int currentLeft = Console.CursorLeft;
        int currentTop = Console.CursorTop;
        Console.Write(new String(' ', Console.WindowWidth - currentLeft));
        Console.SetCursorPosition(currentLeft, currentTop);
    }

Ответ 8

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);
    }
}

Ответ 9

Я думаю, я нашел, почему есть несколько разных ответов на этот вопрос. Когда окно было изменено таким образом, что оно имеет горизонтальную полосу прокрутки (поскольку буфер больше окна) Console.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));
}

Без (Console.WindowWidth >= Console.BufferWidth? 1: 0) код может перемещать курсор вверх или вниз в зависимости от того, какую версию вы используете на этой странице, и состояние окна.