Comment définir les multiples arguments d’une chaîne pour aligner le centre?

J’ai une chaîne comme ci-dessous, et je veux que chaque argument s’aligne au centre, nous avons l’option pour gauche qui est (+) et droite qui est (-)

basketItemPrice = ssortingng.Format("\n\n{0, -5}{1, -14:0.00}{2, -18:0.00}{3,-14:0.00}{4,6}{5,-12:0.00}", item.Quantity, item.OrderItemPrice, item.MiscellaniousCharges, item.DiscountAmountTotal, "=", item.UpdateItemAmount(Program.currOrder.OrderType)); 

Mais je veux aligner le centre.

EDIT: – Centrer l’alignement de chaque texte sur l’espace couvert … comme le premier argument prend 5 caractères et dessine en partant de la gauche, mais je veux que le texte soit dessiné au centre-centre.

Malheureusement, ceci n’est pas supporté nativement par Ssortingng.Format . Vous devrez patiner vous-même votre corde:

 static ssortingng centeredSsortingng(ssortingng s, int width) { if (s.Length >= width) { return s; } int leftPadding = (width - s.Length) / 2; int rightPadding = width - s.Length - leftPadding; return new ssortingng(' ', leftPadding) + s + new ssortingng(' ', rightPadding); } 

Exemple d’utilisation:

 Console.WriteLine(ssortingng.Format("|{0}|", centeredSsortingng("Hello", 10))); Console.WriteLine(ssortingng.Format("|{0}|", centeredSsortingng("World!", 10))); 

J’ai essayé de créer une méthode d’extension qui conserve le support IFormattable . Il utilise une classe nestede qui mémorise la valeur brute et la largeur souhaitée. Ensuite, lorsque la chaîne de formatage est fournie, elle est utilisée, si possible.

Cela ressemble à ceci:

 public static class MyExtensions { public static IFormattable Center(this T self, int width) { return new CenterHelper(self, width); } class CenterHelper : IFormattable { readonly T value; readonly int width; internal CenterHelper(T value, int width) { this.value = value; this.width = width; } public ssortingng ToSsortingng(ssortingng format, IFormatProvider formatProvider) { ssortingng basicSsortingng; var formattable = value as IFormattable; if (formattable != null) basicSsortingng = formattable.ToSsortingng(format, formatProvider) ?? ""; else if (value != null) basicSsortingng = value.ToSsortingng() ?? ""; else basicSsortingng = ""; int numberOfMissingSpaces = width - basicSsortingng.Length; if (numberOfMissingSpaces <= 0) return basicString; return basicString.PadLeft(width - numberOfMissingSpaces / 2).PadRight(width); } public override string ToString() { return ToString(null, null); } } } 

Remarque: vous n'avez pas indiqué si vous souhaitez que le caractère d'espacement "supplémentaire" soit placé à gauche ou à droite dans les cas où un nombre impair de caractères d'espace doit être ajouté.

Ce test semble indiquer que cela fonctionne:

 double theObject = Math.PI; ssortingng test = ssortingng.Format("Now '{0:F4}' is used.", theObject.Center(10)); 

Bien entendu, la chaîne de format F4 avec un double signifie "arrondir à 4 décimales après le séparateur".

Je ne suis pas sûr de comprendre votre question mais j’espère que cela vous aide:

 public static class SsortingngHelper { public static ssortingng Center(this Ssortingng value, int width) { var padding = (width + value.Length) / 2; return value.PadLeft(padding, '#'); } } 

Si vous dessinez sur un bitmap, utilisez la méthode Graphics.DrawSsortingng (..) avec un alignement de chaîne défini au centre.

Beaucoup d’exemples ici:

http://msdn.microsoft.com/en-us/library/system.drawing.ssortingngformat.linealignment.aspx