2012-10-11 24 views
5

Tôi gặp sự cố với văn bản định tâm trong ứng dụng giao diện điều khiển C# .NET4.Văn bản định tâm trong ứng dụng giao diện điều khiển C# chỉ hoạt động với một số đầu vào

Đây là phương pháp của tôi căn giữa đối tượng văn bản:

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

Tuy nhiên, tôi chỉ nhận được đầu ra vì nó có thể đã được xuất ra bình thường. Nếu tôi sử dụng dòng này:

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

"Văn bản" được căn giữa như bình thường.

tôi kêu gọi centerText với hai phương pháp:

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

Vấn đề xảy ra khi/bởi vì văn bản của bạn dài một nửa chiều rộng của màn hình. – DaveShaw

+0

@DaveShaw Có một vấn đề lớn hơn đó: chiều rộng văn bản không bao giờ là một phần của việc định tâm. –

Trả lời

10

Hãy thử điều này thay vì:

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

Vấn đề với mã ban đầu của bạn là bạn văn bản bắt đầu ở trung tâm màn hình. Bạn muốn trung tâm của văn bản ở đó.

Bạn sẽ thực hiện thêm một chút công việc nếu bạn muốn in toàn bộ đoạn văn được căn giữa như thế này.

+0

Cảm ơn! Làm việc như một say mê! –

1

Các văn bản được thông qua năm có khoảng trắng như \r\n, sau đó loại bỏ trước khi gọi các ghi như

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

// Then center on text clean 
+0

Trong khi đây là lời khuyên tốt, nó không phải là vấn đề gốc ở đây. Điều này do đó có lẽ chỉ là một bình luận. – Servy

0

tôi có phương pháp riêng của tôi để gọi giao diện điều khiển tiêu đề:

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

Sau đó, bạn gọi nó là như thế này YourStaticClass.Header("Test", "Version 1.0");

nó sẽ giống như sau:

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

Bạn có thể thay thế các 90 trong windowsWidth với Console.WindowWidth

Các vấn đề liên quan