6

文字列 (以下のようなもの) があり、各引数を中央揃えにします。

左揃え(「+」)と右揃え(「-」)のオプションがありますが、中央揃えにしたいです。

basketItemPrice = string.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));
4

4 に答える 4

14

残念ながら、これはネイティブではサポートされていませんString.Format。文字列を自分でパディングする必要があります。

static string centeredString(string s, int width)
{
    if (s.Length >= width)
    {
        return s;
    }

    int leftPadding = (width - s.Length) / 2;
    int rightPadding = width - s.Length - leftPadding;

    return new string(' ', leftPadding) + s + new string(' ', rightPadding);
}

使用例:

Console.WriteLine(string.Format("|{0}|", centeredString("Hello", 10)));
Console.WriteLine(string.Format("|{0}|", centeredString("World!", 10)));
于 2013-09-02T12:23:16.623 に答える
7

サポートを維持する拡張メソッドを作成しようとしましたIFormattable。生の値と目的の幅を記憶するネストされたクラスを使用します。次に、フォーマット文字列が提供されると、可能であればそれが使用されます。

次のようになります。

public static class MyExtensions
{
    public static IFormattable Center<T>(this T self, int width)
    {
        return new CenterHelper<T>(self, width);
    }

    class CenterHelper<T> : IFormattable
    {
        readonly T value;
        readonly int width;

        internal CenterHelper(T value, int width)
        {
            this.value = value;
            this.width = width;
        }

        public string ToString(string format, IFormatProvider formatProvider)
        {
            string basicString;
            var formattable = value as IFormattable;
            if (formattable != null)
                basicString = formattable.ToString(format, formatProvider) ?? "";
            else if (value != null)
                basicString = value.ToString() ?? "";
            else
                basicString = "";

            int numberOfMissingSpaces = width - basicString.Length;
            if (numberOfMissingSpaces <= 0)
                return basicString;

            return basicString.PadLeft(width - numberOfMissingSpaces / 2).PadRight(width);
        }
        public override string ToString()
        {
            return ToString(null, null);
        }
    }
}

注: 奇数個のスペース文字を追加する必要がある場合に、1 つの「余分な」スペース文字を左または右に配置するかどうかを指定していません。

このテストは、それが機能することを示しているようです:

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

もちろん、「小数点以下4桁に丸める」F4という意味を持つフォーマット文字列。double

于 2013-09-02T13:04:43.777 に答える
-3

ビットマップに描画する場合は、文字列の配置を中央に設定して Graphics.DrawString(..) メソッドを使用します。

ここにたくさんの例があります:

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

于 2013-09-02T12:30:45.403 に答える