J'ai un problème de texte de centrage dans une application C # .NET4 Console.
Ceci est ma méthode de centrage du texte: p> Cependant, je viens de Obtenez la sortie telle qu'elle aurait été émise normalement.
Si j'utilise cependant cette ligne: p> le "texte" est centré comme il se doit. P> Je appelle Centretext code> Avec ces deux méthodes: p>
3 Réponses :
Essayez cela à la place:
private static void centerText(String text) { Console.Write(new string(' ', (Console.WindowWidth - text.Length) / 2)); Console.WriteLine(text); }
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
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); code>
J'ai ma propre méthode pour appeler des en-têtes de console: alors vous l'appelez comme ceci Il devrait ressembler à ceci: p> Vous pouvez remplacer le YourSticClass.header ("Test", "Version 1.0"); Code > p>
90 code> dans
windowsWidth code> avec
console.windowwidth p> 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);
}
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
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.