我遇到了在C#.NET4控制台应用程序中居中文本的问题。
这是我将文字居中的方法:
private static void centerText(String text)
{
int winWidth = (Console.WindowWidth / 2);
Console.WriteLine(String.Format("{0,"+winWidth+"}", text));
}
然而,我只是得到输出,因为它会正常输出。 但是,如果我使用这一行:
Console.WriteLine(String.Format("{0,"+winWidth+"}", "text"));
“文本”按照应有的方式居中。
我用这两种方法调用centerText
:
private static void drawStars()
{
centerText("*********************************************");
}
private static void title(string location)
{
drawStars();
centerText("+++ Du er nu her: " + location + "! +++");
drawStars();
}
答案 0 :(得分:13)
请改为尝试:
private static void centerText(String text)
{
Console.Write(new string(' ', (Console.WindowWidth - text.Length) / 2));
Console.WriteLine(text);
}
初始代码的问题是您的文字在屏幕中心启动。你希望文本的中心在那里。
如果你想打印像这样的中心的整个段落,你会做更多的工作。
答案 1 :(得分:2)
传入的文本可能有\r\n
这样的空格,然后在调用写入之前将其删除,例如
string textClean = Regex.Replace(text, @"([\r\n])", string.Empty);
// Then center on text clean
答案 2 :(得分:2)
我有自己的方法来调用控制台标题:
public static void Header(string title, string subtitle = "", ConsoleColor color = ConsoleColor.White)
{
int windowWidth = 90 - 2;
string titleContent = String.Format("║{0," + ((windowWidth / 2) + (title.Length / 2)) + "}{1," + (windowWidth - (windowWidth / 2) - (title.Length / 2) + 1) + "}", title, "║");
string subtitleContent = String.Format("║{0," + ((windowWidth / 2) + (subtitle.Length / 2)) + "}{1," + (windowWidth - (windowWidth / 2) - (subtitle.Length / 2) + 1) + "}", subtitle, "║");
Console.WriteLine("╔════════════════════════════════════════════════════════════════════════════════════════╗");
Console.WriteLine(titleContent);
if (!string.IsNullOrEmpty(subtitle))
{
Console.WriteLine(subtitleContent);
}
Console.WriteLine("╚════════════════════════════════════════════════════════════════════════════════════════╝");
}
然后你将其称为YourStaticClass.Header("Test", "Version 1.0");
它应该是这样的:
╔════════════════════════════════════════════════════════════════════════════════════════╗
║ Test ║
║ Version 1.0 ║
╚════════════════════════════════════════════════════════════════════════════════════════╝
您可以使用90
windowsWidth
中的Console.WindowWidth
更新 - 2019年2月 - 清除代码并制作动态尺寸
/// <summary>
/// Application header, also sets the console title
/// </summary>
/// <param name="title">Title of application</param>
/// <param name="subtitle">Subtitle of application</param>
/// <param name="foreGroundColor">Foreground color</param>
public static void Header(string title, string subtitle = "", ConsoleColor foreGroundColor = ConsoleColor.White, int windowWidthSize = 90)
{
Console.Title = title + (subtitle != "" ? " - " + subtitle : "");
string titleContent = CenterText(title, "║");
string subtitleContent = CenterText(subtitle, "║");
string borderLine = new String('═', windowWidthSize - 2);
Console.ForegroundColor = foreGroundColor;
Console.WriteLine($"╔{borderLine}╗");
Console.WriteLine(titleContent);
if (!string.IsNullOrEmpty(subtitle))
{
Console.WriteLine(subtitleContent);
}
Console.WriteLine($"╚{borderLine}╝");
Console.ResetColor();
}
/// <summary>
/// Align content to center for console. Can be used with decoration if used inside menu or header
/// </summary>
/// <param name="content">Content to center</param>
/// <param name="decorationString">Left and right decoration, default is empty/none</param>
/// <returns>Center aligned text</returns>
public static string CenterText(string content, string decorationString = "", int windowWidthSize = 90)
{
int windowWidth = windowWidthSize - (2 * decorationString.Length);
return String.Format(decorationString + "{0," + ((windowWidth / 2) + (content.Length / 2)) + "}{1," + (windowWidth - (windowWidth / 2) - (content.Length / 2) + decorationString.Length) + "}", content, decorationString);
}