如何将文本保留在控制台顶部?

Jos*_*hua 3 .net c# console

我正在尝试让我的控制台应用程序自动滚动但将文本保留在顶部。文本历史必须可访问,因此Console.Clear不可行。

有什么方法可以检测控制台何时滚动或调整当前 Y 位置的任何方法,因为我知道当您的文本即将离开屏幕时,控制台会滚动。我想要同样的效果,但要在窗口顶部保留最新的一行。任何帮助表示赞赏,谢谢!

Ahm*_*eed 5

您可以使用该Console.SetWindowPosition()方法。*

参数
leftInt32
控制台窗口左上角的列位置。

topInt32
控制台窗口左上角的行位置。

这是一个演示示例:

static void Main(string[] args)
{
    int i = 0;
    while (true)
    {
        Console.ReadKey(false);
        Console.WriteLine($"You are currently at line #{++i}");
        Console.SetWindowPosition(0, i - 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

将控制台滚动到顶部

请注意,如果您接近 的值Console.BufferHeight,您可能会得到一个 ArgumentOutOfRangeException,也就是说,当新位置(顶部)大于 时Console.BufferHeight - Console.WindowHeight,您可能需要考虑到这一点。我会添加一个简单的条件来处理这种情况。例子:

int newTop = i - 1;
if (newTop + Console.WindowHeight <= Console.BufferHeight)
{
    Console.SetWindowPosition(0, newTop);
}
Run Code Online (Sandbox Code Playgroud)

..但您可能希望以不同的方式处理此问题(例如,随时增加缓冲区,更改窗口大小等)


* 不要被方法的名称误导。此处的“窗口”并不意味着操作系统术语(边框等)中的实际桌面/控制台窗口。相反,它指的是字符缓冲区当前显示的窗口。要移动实际的控制台窗口,您必须使用SetWindowPosWindows API 函数。例子。