c# - 如何将文本保留在控制台顶部?
问题描述
我试图让我的控制台应用程序自动滚动,但将文本保持在顶部。文本历史记录必须可访问,因此Console.Clear
不可行。
是否有任何方法可以检测控制台何时滚动或调整当前 Y 位置的任何方法,因为我知道当您的文本即将离开屏幕时控制台会滚动。我想要同样的效果,但要将最新的行保留在窗口的顶部。任何帮助表示赞赏,谢谢!
解决方案
您可以使用该Console.SetWindowPosition()
方法。*
参数
left
Int32
控制台窗口左上角的列位置。
top
Int32
控制台窗口左上角的行位置。
这是一个示例来演示:
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);
}
..但您可能希望以不同的方式处理此问题(例如,随时增加缓冲区、更改窗口大小等)
* 不要被方法的名称误导。这里的“窗口”并不意味着操作系统术语(边框等)中的实际桌面/控制台窗口。相反,它指的是字符缓冲区的当前显示窗口。要移动实际的控制台窗口,您必须使用SetWindowPos
Windows API 函数。例子。
推荐阅读
- django - Django - 从两个下拉菜单中选择选项并在第三个下拉菜单中显示过滤结果
- javascript - 如何在javascript中使用元键模拟逗号按键
- python - 如何减去具有多个条件的单独元组列表中的最后一个数字/元素?
- javascript - 使用 javascript 在指南上移动 SVG 对象
- c++ - 嵌套 std::void_t、std::enable_if 和包扩展
- python - 从雅虎财务错误中抓取 Python:“NoneType”对象没有属性“父”
- swift - 如何在 UItextField 中添加不同字体的字符串?
- botframework - 在 Botframework V4 上同步语音和文本
- python - 如何将许可证密钥存储在服务器数据库中并在 python 中获取
- windows - Windows 使用 FOR 循环为当前文件夹中具有 EXIF 值的文件名批量添加后缀