2012-10-11 12 views
5

के साथ काम कर रहा है मुझे सी # .NET4 कंसोल ऐप में टेक्स्ट केंद्रित करने में कोई समस्या है।सी # कंसोल ऐप में केंद्रित टेक्स्ट केवल कुछ इनपुट

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

हालांकि, मैं सिर्फ उत्पादन के रूप में यह होता है सामान्य रूप से outputted दिया है मिलती है:

यह पाठ केंद्रित के लिए मेरे विधि है। अगर मैं फिर भी इस लाइन का उपयोग करें:

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

समस्या तब होती है जब/अपने पाठ अब है कि आधे स्क्रीन की चौड़ाई है, क्योंकि साथ windowsWidth में 90 बदल सकते हैं। – DaveShaw

+0

@ डेवशॉ उस से बड़ी समस्या है: टेक्स्ट चौड़ाई कभी भी केंद्र का हिस्सा नहीं था। –

उत्तर

10

बजाय इस प्रयास करें:

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

अपने प्रारंभिक कोड के साथ समस्या यह थी कि अपने पाठ शुरू होता है स्क्रीन के केंद्र में। आप पाठ का केंद्र वहां होना चाहते हैं।

यदि आप इस तरह केंद्रित पूरे अनुच्छेद मुद्रित करना चाहते हैं तो आप थोड़ा और काम करने जा रहे हैं।

+0

धन्यवाद! एक जादू की तरह काम करता है! –

1

पाठ में पारित खाली स्थान के \r\n रूप में इस तरह हो सकता है, तो हटा दें कि कंसोल हेडर फोन करने के लिए लिखने जैसे

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

// Then center on text clean 
+0

हालांकि यह अच्छी सलाह है, यह मूल समस्या नहीं है। इसलिए यह शायद एक टिप्पणी होनी चाहिए। – Servy

0

मैं अपने ही तरीके होते है, कॉल करने से पहले:

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          ║ 
╚════════════════════════════════════════════════════════════════════════════════════════╝ 

आप Console.WindowWidth

संबंधित मुद्दे