2012-10-11 9 views
5

Mam problem z centrowaniem tekstu w aplikacji konsoli C# .NET4.Wyśrodkowywanie tekstu w aplikacji konsoli C# działa tylko z pewnym wprowadzeniem

To jest moja metoda centrowania tekstu:

private static void centerText(String text) 
{ 
    int winWidth = (Console.WindowWidth/2); 
    Console.WriteLine(String.Format("{0,"+winWidth+"}", text)); 
} 

Jednak ja po prostu wyjście gdyż zostały wyprowadzone normalnie. Gdybym jednak skorzystać z tej linii:

Console.WriteLine(String.Format("{0,"+winWidth+"}", "text")); 

„Tekst” zostanie wyśrodkowany tak jak powinno.

Wołam centerText z tych dwóch metod:

private static void drawStars() 
{ 
    centerText("*********************************************"); 
} 
private static void title(string location) 
{ 
    drawStars(); 
    centerText("+++ Du er nu her: " + location + "! +++"); 
    drawStars(); 
} 
+0

Problem pojawia się, gdy/bo tekst jest dłuższy, że połowa szerokości ekranu. – DaveShaw

+0

@DaveShaw Istnieje większy problem: szerokość tekstu nigdy nie była nawet częścią centrowania. –

Odpowiedz

10

Spróbuj to zamiast:

private static void centerText(String text) 
{ 
    Console.Write(new string(' ', (Console.WindowWidth - text.Length)/2)); 
    Console.WriteLine(text); 
} 

Problem z kodem początkowym było że tekst rozpoczyna w środku ekranu. Chcesz, aby środek tekstu był tam.

Będziesz robić trochę więcej pracy, jeśli chcesz wydrukować całe akapity wyśrodkowane w ten sposób.

+0

Dzięki! Działa jak marzenie! –

1

Tekst przekazany może mieć spacje takiego jak \r\n, następnie wyjąć że przed wywołaniem napisać taki jak

string textClean = Regex.Replace(text, @"([\r\n])", string.Empty); 

// Then center on text clean 
+0

Chociaż jest to dobra rada, nie wydaje się, że jest to główny problem. Powinno to zatem być tylko komentarzem. – Servy

0

Mam własną metodę wywoływania nagłówki konsoli:

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("╚════════════════════════════════════════════════════════════════════════════════════════╝"); 
} 

wtedy nazwij to tak: YourStaticClass.Header("Test", "Version 1.0");

Powinno to wyglądać tak:

╔════════════════════════════════════════════════════════════════════════════════════════╗ 
║           Test           ║ 
║          Version 1.0          ║ 
╚════════════════════════════════════════════════════════════════════════════════════════╝ 

Można wymienić 90 w windowsWidth z Console.WindowWidth