【问题标题】:Overwriting Console line with various length texts用各种长度的文本覆盖控制台行
【发布时间】:2019-01-29 09:46:35
【问题描述】:

我正在尝试在同一个地方显示加载百分比

我找到了解决方案

Console.Write($"\r{ (double) (i+1) * 100 / list.Count }% - {text}");

但在百分比之后,我想显示一些具有不同长度的文本,例如 20-40 个字符之间的内容

这种方法的问题在于,如果“新”行比“上一个”行短,那么“上一个”文本的某些部分仍然存在。

我设法写了'hack',它用空格覆盖当前行(清除它),然后写我的行

Console.Write($"\r                                                                                                             ");
Console.Write($"\r{ (double) (i+1) * 100 / list.Count }% - {text}");

有更好的解决方案吗?

【问题讨论】:

  • 如果您知道前面文本的长度,您可以在控制台中写入尽可能多的退格字符 (\b),然后执行 Console.Write。另见stackoverflow.com/a/5195807/2137237

标签: c#


【解决方案1】:

最简单的方法通常是使用

var stringOfLengthMaxWithSpacestoLeft = yourString.PadLeft(MaxStringLength, ' ');

var stringOfLengthMaxWithSpacestoRight = yourString.PadRight(MaxStringLength, ' ');

如果你想清除该行,你所要做的就是使用退格字符,然后用相同的长度覆盖,即

for (var i = 0; i++; i < MaxStringLength) 
    Console.Write("\b");

然后你可以重新开始写了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多