有没有一种方法可以显示文本而不设置光标位置

本文关键字:文本 显示 位置 置光标 方法 一种 有没有 | 更新日期: 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。但是,您可以获得CursorLeftCursorTop的当前位置,然后在之后恢复它们(如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);