在C#中,如何在不移动光标的情况下将字符输出到控制台
本文关键字:情况下 字符 输出 控制台 移动 光标 | 更新日期: 2023-09-27 18:00:31
我目前正在使用C#(.NET 4.5)来构建控制台应用程序。我遇到的问题是,在使用Console.Write(char c)后,光标总是移动到下一个单元格,所以当它到达一行的最后一个单元格时,它会转到下一行,这会打乱所有的布局。是否可以在不移动光标的情况下将字符输出到控制台(具有背景和前景色)?
我使用的代码如下:
Console.BackgroundColor = bgColor;
Console.ForegroundColor = fgColor;
Console.SetCursorPosition(currX, currY);
Console.Write(c);
假设currX和currY为整数,bgColor和fgColor为ConsoleColor,c为char。
谢谢。
根据Console
类的文档,它只提供对标准输出流的访问,而不提供对屏幕缓冲区的访问(尽管您可以更改缓冲区的一些属性,如大小)。MoveBufferArea
是另一个明显的例外,但在这里并不适用。
Win32 API确实提供了对控制台缓冲区的访问。您可能希望p/invoke WriteConsoleOutput
或WriteConsoleOutputCharacter
。(此处调用声明)
值得注意的是:
WriteConsoleOutput
对光标位置没有影响。
哦,您可能想要Unicode版本(以W
结尾),因为.NET字符串都是UTF-16。
1它允许您通过两种方式提供内容:内容已经在缓冲区中,但首先要把它放在那里是个问题,或者是从提供的字符和属性中获取内容,但这只用于填充"源"区域,目的地不是可选的。
试试。。。
Console.Write("b");
Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
Console.Write("c");
对我来说,这只是打印b
,然后用c
替换它。实际上,前两行在不移动光标的情况下一起写入控制台。您可以得出这样的结论,因为当您编写c
时,它会覆盖b
,而不是将其放置在下一个位置。
你甚至可以写一个辅助方法:
static void WriteWithoutMove(string s)
{
Console.Write(s);
Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
}
这就是你要找的吗?
我记得旧的DOS,使用old命令(例如)BASIC:
locate(21,50)
print "Qty[26]";
注:(;
)用于为文本粘贴光标并添加1个字符,如果使用(,
)则为TAB (CHR$(8))