Может Подключиться с консоли. Ясный использоваться, чтобы только очистить строку вместо целой консоли?

При работе над программой вопроса/ответа для школы мне пришло в голову, что я могу использовать 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() не будет иметь ссылки на те значения, чтобы очистить и произвести снова. Вот почему интересно, могу ли я просто задать вопрос, затем стереть строку и произвести только ответ (или ответы).

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

62
задан 1 April 2014 в 01:42

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();
[еще 116] информация

120
ответ дан 31 October 2019 в 13:16

Более простое и по моему скромному мнению лучшее решение:

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

Это использует возврат каретки для движения в начало строки, затем печатает столько пробелов, сколько консоль является шириной и возвращается к началу строки снова, таким образом, можно распечатать собственный тест впоследствии.

38
ответ дан 31 October 2019 в 13:16

"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);
}
10
ответ дан 31 October 2019 в 13:16

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

static void ClearLine(){
    Console.SetCursorPosition(0, Console.CursorTop);
    Console.Write(new string(' ', Console.WindowWidth)); 
    Console.SetCursorPosition(0, Console.CursorTop - 1);
}
8
ответ дан 31 October 2019 в 13:16

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

Console.CursorTop = 0;
Console.CursorLeft = 0;
Console.Write("Whatever...".PadRight(Console.BufferWidth));
3
ответ дан 31 October 2019 в 13:16

Для очистки от текущей позиции в конец текущей строки сделайте это:

    public static void ClearToEndOfCurrentLine()
    {
        int currentLeft = Console.CursorLeft;
        int currentTop = Console.CursorTop;
        Console.Write(new String(' ', Console.WindowWidth - currentLeft));
        Console.SetCursorPosition(currentLeft, currentTop);
    }
1
ответ дан 31 October 2019 в 13:16

Мы могли просто записать следующий метод

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

, Он хорошо работает для меня.

1
ответ дан 31 October 2019 в 13:16
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);
    }
}
0
ответ дан 31 October 2019 в 13:16

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

0
ответ дан 31 October 2019 в 13:16

Другие вопросы по тегам:

Похожие вопросы: