有没有一种方法可以显示文本而不设置光标位置
本文关键字:文本 显示 位置 置光标 方法 一种 有没有 | 更新日期: 2023-09-27 17:51:01
基本上,我想知道是否有一种方法可以在不设置光标位置的情况下显示文本
比如,如果我想在点5,7处显示'0'
我知道我能做到
Console.SetCursorPosition(5,7);
Console.Write("0");
但是我需要我的游标在我的程序中做别的事情。有没有办法在不设置位置的情况下在那个点显示0 ?
非常感谢!
尝试捕获前置位置,然后重新设置:
Console.WriteLine("abc");
var prevX = Console.CursorLeft;
var prevY = Console.CursorTop;
Console.SetCursorPosition(15, 17);
Console.Write("0");
Console.SetCursorPosition(prevX, prevY);
Console.ReadKey();
您必须为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);