基本上,我想知道是否有办法在不设置光标位置的情况下显示文字
喜欢,如果我想在第5,7点显示'0'
我知道我能做到
Console.SetCursorPosition(5,7);
Console.Write("0");
但是我的光标需要我的程序中的其他东西。有没有办法在没有设置位置的情况下显示0?
非常感谢!
答案 0 :(得分:4)
尝试捕获prev位置然后再次设置:
Console.WriteLine("abc");
var prevX = Console.CursorLeft;
var prevY = Console.CursorTop;
Console.SetCursorPosition(15, 17);
Console.Write("0");
Console.SetCursorPosition(prevX, prevY);
Console.ReadKey();
答案 1 :(得分:3)
您必须设置Console.Write
的光标位置才能知道实际写入的位置。所以你无法避免使用SetCursorPosition
。但是,您可以使用CursorLeft
和CursorTop
获取当前位置,然后将其恢复(如Giorgi的答案)。
你可以用一个方便的方法将这一切包装起来:
public static void WriteAt(string s, int x, int y)
{
// save the current position
var origCol = Console.CursorLeft;
var origRow = Console.CursorTop;
// move to where you want to write
Console.SetCursorPosition(x, y);
Console.Write(s);
// restore the previous position
Console.SetCursorPosition(origCol, origRow);
}
您可以这样使用:
WriteAt("foo",5,15);
您甚至可以使用这样的扩展方法(遗憾的是,您无法向Console
添加扩展名,因为它是一个静态类,但您可以将其添加到String
!):
public static class StringConsoleHelper
{
public static void WriteAt(this string s, int x, int y)
{
// save the current position
var origCol = Console.CursorLeft;
var origRow = Console.CursorTop;
// move to where you want to write
Console.SetCursorPosition(x, y);
Console.Write(s);
// restore the previous position
Console.SetCursorPosition(origCol, origRow);
}
}
所以现在你可以做类似的事情:
"foo".WriteAt(5,15);