C#绘制框设置光标

时间:2012-05-06 16:14:04

标签: c# console

我正在尝试在控制台中绘制一个方框,但我无法在不输入新行的情况下做到这一点。

我做了这样的事情:

-----
|   |
_____

但输入行直接位于其下方并移除了该行的上一行。

我尝试使用Console.setCursorPosition,但最后一行已经填充,因此已经创建了一个新行。

如何阻止创建新行?

提前致谢

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

身高:50 宽度:100

我可以在上面给定的控制台大小的任何一个磁贴上放置任何字符。

如果是这样的话会有可能吗?

2 个答案:

答案 0 :(得分:0)

我认为非常类似的任务有微软的人。 看看:

http://msdn.microsoft.com/en-us/library/system.console.setcursorposition.aspx 有一些非常相似的东西。希望这会有所帮助。

修改

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

这应删除新行的最后'\ r \ n'个字符。

答案 1 :(得分:0)

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

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

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

如果有帮助,请告诉我。

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

<强>更新

如果你想在框中使用一个边框到控制台窗口,我想它是 最简单的解决方案 (如果不是唯一一个)不添加您正在绘制的框底部的最后一个 - 字符。

更新II

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

尝试这样的代码:

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);

这样可以让你在窗口中看到整个边框。

更新III

建议的解决方案

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