C# Консольная целевая очистка - PullRequest
0 голосов
/ 04 мая 2020

Добрый день. Я ищу способ очистить не все консоли (например, Console.Clear ()). У меня есть фиксированный текст ниже, который должен быть там всегда. И я хочу переписать только текст выше. Узнайте способ очистки одной строки здесь почти в той же самой топи c.

static void Main(string[] args)
    {
        FixedText();
        Console.SetCursorPosition(0, 0);
        string a = "This is the test programm\n" + "press any key";
        Console.WriteLine(a);
        Console.ReadKey(true);
        ClearTheConsole1();
        string b = "Text was successfully changed";
        Console.WriteLine(b);
        Console.ReadKey();
    }
    // Method for fixed text below the main text area
    public static void FixedText()
    {
        Console.SetCursorPosition(0, 5);
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("This text must be fixed here");           
        Console.ResetColor();

    }
    // Method for clearing the current line
    public static void ClearCurrentConsoleLine()
    {
        int currentLineCursor = Console.CursorTop;
        Console.SetCursorPosition(0, Console.CursorTop);
        Console.Write(new string(' ', Console.WindowWidth));
        Console.SetCursorPosition(0, currentLineCursor);
    }

Далее я использую метод ClearCurrent ConsoleLine, чтобы создать другую для очистки всех строк выше с использованием Console.WindowTop и его работало почти приятно Но потом я решаю изменить условия проверки с> на <(потому что решаю, что проверка позиции лучше с низких на высокие значения и не хочу использовать && проверки), и до сих пор работает. После этого я вернулся, чтобы начать, но был сбит с толку, потому что теперь программа просто игнорирует все мои проверки WindowTop и делает так, будто я вызываю только ClearCurrentConsoleLine. И я ничего не меняю в Main. Так что я действительно не понимаю, как это происходит. Это мои два помощника. </p>

// Method for clearing the main text area
    public static void ClearTheConsole1()
    {
        if (Console.WindowTop < 2)
        {
            Console.SetCursorPosition(0, Console.CursorTop - 1);
            ClearCurrentConsoleLine();     
        }
        else if (Console.WindowTop < 3)
        {
            for (int i = 0; i < 2; i++)
            {
                Console.SetCursorPosition(0, Console.CursorTop - 1);
                ClearCurrentConsoleLine();
            }
        }
        else if (Console.WindowTop < 4)
        {
            for (int i = 0; i < 3; i++)
            {
                Console.SetCursorPosition(0, Console.CursorTop - 1);
                ClearCurrentConsoleLine();
            }
        }
        else
        {
            for (int i = 0; i < 4; i++)
            {
                Console.SetCursorPosition(0, Console.CursorTop - 1);
                ClearCurrentConsoleLine();
            }
        }


public static void ClearTheConsole2()
    {
        if (Console.WindowTop > 3)
        {
            for (int i = 0; i < 4; i++)
            {
                Console.SetCursorPosition(0, Console.CursorTop - 1);
                ClearCurrentConsoleLine();
            }
        }
        else if (Console.WindowTop > 2)
        {
            for (int i = 0; i < 3; i++)
            {
                Console.SetCursorPosition(0, Console.CursorTop - 1);
                ClearCurrentConsoleLine();
            }
        }
        else if (Console.WindowTop > 1)
        {
            for (int i = 0; i < 2; i++)
            {
                Console.SetCursorPosition(0, Console.CursorTop - 1);
                ClearCurrentConsoleLine();
            }
        }
        else
        {
                Console.SetCursorPosition(0, Console.CursorTop - 1);
                ClearCurrentConsoleLine();
        }
}

До того, как второй метод работал хоть как-то, теперь он вообще не работает. Пожалуйста, скажите мне, что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...