.NET控制台应用程序,可以创建标签和区域吗?

时间:2009-10-12 16:29:29

标签: c#

是否可以将C#控制台应用程序输出文本添加到已绘制的标签中? 我见过一些原生的win 32控制台应用可以做到这一点。

屏幕上的用户看到了:

进度:1%或进度:50%取决于标签的更新时间(标签进度保持在同一位置,而只有进度百分比的值得到更新。

而不是我知道当前如何执行的唯一方法是console.writeLine,它将为每个Progress更新生成一个单独的行。

EG:

进展:1%

进展:2%

4 个答案:

答案 0 :(得分:9)

是的,你可以这样做。

您可以在写完后使用Console.SetCursorPosition重新定位光标。

例如:

Console.WriteLine("Starting algorithm...");

int line = Console.CursorTop;
for (int i=0;i<100;++i)
{
    Console.SetCursorPosition(0,line);
    Console.Write("Progress is {0}%        ",i);  // Pad with spaces to make sure we cover old text
    Thread.Sleep(100);
}
Console.SetCursorPosition(0,line);    
Console.WriteLine("Algorithm Complete.       "); // Pad with spaces to make sure we cover old text

答案 1 :(得分:1)

答案 2 :(得分:0)

虽然我已经接受了答案:这是下一个人的动态例子:

private static List<screenLocation> screenLocationsBasic = new List<screenLocation>();

public class screenLocation
{
    public int Left { get; set; }
    public int Top { get; set; }

    public screenLocation(int left, int top)
    {
        this.Left = left;
        this.Top = top; 
    }


}

然后在模板绘制阶段,您可以添加动态元素,具体取决于循环中有多少项:

screenLocationsBasic.Add(new screenLocation(Console.CursorLeft , Console.CursorTop ));

然后在数据呈现期间,您可以根据您正在处理的项目更新该位置:

Console.SetCursorPosition(screenLocationsBoth[pos].Left, screenLocationsBoth[pos].Top);

然后您需要做的就是传递pos(循环中项目的位置)。

答案 3 :(得分:-1)

您可以清除窗口并每次重绘屏幕,这应该足够快,看起来已经发生了变化。