7
votes

Le texte de centrage dans l'application de console C # travaillant uniquement avec certaines entrées

J'ai un problème de texte de centrage dans une application C # .NET4 Console.

Ceci est ma méthode de centrage du texte: xxx

Cependant, je viens de Obtenez la sortie telle qu'elle aurait été émise normalement. Si j'utilise cependant cette ligne: xxx

le "texte" est centré comme il se doit.

Je appelle Centretext Avec ces deux méthodes: xxx


2 commentaires

Le problème se produit lorsque votre texte est plus long que la moitié de la largeur de l'écran.


@DAVESHAW Il y a un gros problème que celui-là: la largeur du texte n'était même jamais partie du centrage.


3 Réponses :


17
votes

Essayez cela à la place:

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


0 commentaires

2
votes

Le texte passé peut avoir des espaces blancheurs tels que \ r \ n code>, puis supprimez-le avant d'appeler l'écriture telle que

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

// Then center on text clean 


2 commentaires

Bien que ce soit bon conseil, il ne semble pas être le problème de la racine ici. Cela devrait donc probablement être juste un commentaire.


Oui, cela ne répond pas à la question mais il est bon de le signaler. C'est quelque chose que vous oubliez rapidement lorsque vous faites des choses comme ça. J'utiliserais ceci: string cleantext = text.replace (environnement.newline, string.empty);



3
votes

J'ai ma propre méthode pour appeler des en-têtes de console: xxx pré>

alors vous l'appelez comme ceci YourSticClass.header ("Test", "Version 1.0"); Code > p>

Il devrait ressembler à ceci: p> xxx pré>

Vous pouvez remplacer le 90 code> dans windowsWidth code> avec console.windowwidth p> p>

update strong> - février 2019 - Taille dynamique nettoyée p>

/// <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);
}


4 commentaires

Bien que cela ne soit pas la réponse acceptée, c'est certainement quelque chose à ajouter à ma bibliothèque. Mais je recommanderais aussi de générer la frontière de manière dynamique;) +1


Agréable. Il s'agissait d'un indice, mais vous avez mis à jour votre réponse quand même. Maintenant, il est plus facile pour les autres de trouver une belle solution. Merci :)


Je veux juste souligner que vous ne passez pas la taille de la fenêtre à Centretext dans les appels d'en-tête respectifs.


Oui, il a sa valeur définie sur 90 par défaut: int windowidthsize = 90