0

我正在尝试在控制台中绘制一个框,但如果不输入新行,我无法弄清楚。

我做了这样的事情:

-----
|   |
_____

但是输入行直接位于它的下方,并删除了框的上排。

我试过了,Console.setCursorPosition但最后一行已经被填满,因此已经创建了一个新行。

如何防止创建新行?

提前致谢

编辑 可以将控制台窗口用作画布吗?让我们假设一个具有以下大小的窗口

高度:50 宽度:100

我可以在上面给定的控制台尺寸内的任何瓷砖上放置任何字符。

如果可以的话,这可能吗?

4

2 回答 2

0

I think that very similair task have guys in Microsoft. Have a look:

http://msdn.microsoft.com/en-us/library/system.console.setcursorposition.aspx There's something very similair. Hope this helps.

EDIT:

Console.Write("\b\b");

This should remove last '\r\n' characters for new line.

于 2012-05-06T16:17:51.557 回答
0

如果您发布您为从 ASCII 字符创建此框而编写的代码,将会很有帮助。

如果您使用Console.WriteLine(),只需Console.Write()在最后一行使用方法即可。因此,对于您问题中的框,代码可能如下所示:

...
Console.WriteLine("-----");
Console.WriteLine("|   |");
Console.Write("-----");
...

让我知道这是否有帮助。

我在示例应用程序中进行了测试,似乎没有创建额外的行。

更新

如果您想使用该框作为控制台窗口的边框,我想这将是最简单的解决方案(如果不是唯一的解决方案),不要在您正在绘制的框的底行添加最后一个-字符。

更新二

您可以尝试使用一个简单的技巧并在绘制最后一行之前动态更改控制台窗口的高度。这将防止窗口滚动。

试试这样的代码:

int width = Console.WindowWidth;
int height = Console.WindowHeight;
int i, j;
for (i = 0; i < width; ++i)
{
    Console.Write("-");
}

for (j = 0; j < height - 2; ++j)
{
    Console.Write("|");

    for (i = 0; i < width - 2; ++i)
    {
        Console.Write(" ");
    }

    Console.Write("|");
}

//enlarge window in order to prevent it from being scrolled
Console.WindowHeight += 1;

for (i = 0; i < width; ++i)
{
    Console.Write("-");
}
//restore window's original size
Console.WindowHeight -= 1;
//set cursor inside the border
Console.SetCursorPosition(1, 1);

这应该允许您在窗口中看到整个边框。

更新三

建议的解决方案

使用上面的代码,但使用Console.BufferWidth而不是Console.WindowHeight. 它似乎工作正常,不需要修改窗口的尺寸。

于 2012-05-06T16:41:21.560 回答