如何在C#控制台中将多行字符串完整居中显示为指定形状
C# 控制台多行模型居中绘制方案
问题原因
控制台输出包含\n的字符串时,换行后光标会自动跳转至新行的行首,和字符串是否使用@前缀定义无关,因此会出现只有第一行位置符合预期的错位问题。
实现方案
最通用的解决方法是逐行拆分模型字符串,每行输出前单独设置光标位置:
1. 封装通用绘制方法
/// <param name="left">绘制区域左上角的水平坐标</param> /// <param name="top">绘制区域左上角的垂直坐标</param> /// <param name="model">待绘制的多行模型字符串</param> void DrawConsoleModel(int left, int top, string model) { string[] modelLines = model.Split('\n'); for (int i = 0; i < modelLines.Length; i++) { Console.SetCursorPosition(left, top + i); Console.Write(modelLines[i]); } }
2. 计算居中坐标调用绘制
// 你的模型字符串 string model = "####\n####\n####\n####"; string[] lines = model.Split('\n'); // 计算居中位置 int centerLeft = (Console.WindowWidth - lines[0].Length) / 2; int centerTop = (Console.WindowHeight - lines.Length) / 2; // 可选:隐藏光标避免绘制闪烁 Console.CursorVisible = false; // 执行绘制 DrawConsoleModel(centerLeft, centerTop, model);
其他说明
如果不想拆分字符串,也可以在每一行前拼接对应数量的缩进空格后再一次性输出,但该方案只适合固定位置绘制,调整坐标需要重新生成字符串,灵活度远低于逐行绘制方案。
内容的提问来源于stack exchange,提问作者Patryk
相关产品推荐
相关产品推荐

