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