首页 > 解决方案 > 如何将文本保留在控制台顶部?

问题描述

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

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

标签: c#.netconsole

解决方案


您可以使用该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);
    }
}

结果:

将控制台滚动到顶部

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

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

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


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


推荐阅读