コード例 #1
0
        public void PrintFormatted(string text, params object[] args)
        {
            if (text == null)
            {
                throw new ArgumentNullException(nameof(text));
            }

            int currentArgument  = 0;
            int currentCharacter = 0;

            while (currentCharacter < text.Length)
            {
                char c = text[currentCharacter];

                if (c != '%')
                {
                    this.DisplayCharacter(c);
                }
                else
                {
                    currentCharacter++;
                    c = text[currentCharacter];
                    switch (c)
                    {
                    case 's':
                    {
                        // string
                        string arg = (string)args[currentArgument];
                        currentArgument++;
                        this.DisplayString(arg);
                        break;
                    }

                    case 'd':
                    {
                        // decimal
                        short arg = short.Parse(args[currentArgument].ToString(), NumberStyles.Integer, CultureInfo.CurrentCulture);
                        currentArgument++;
                        if (arg < 0)
                        {
                            this.DisplayCharacter('-');
                            this.DisplayString(StringUtility.NumberToString(arg * -1));
                        }
                        else
                        {
                            this.DisplayString(StringUtility.NumberToString(arg));
                        }

                        break;
                    }

                    case 'u':
                    {
                        // unsigned decimal
                        ushort arg = ushort.Parse(args[currentArgument].ToString(), NumberStyles.Integer, CultureInfo.CurrentCulture);
                        currentArgument++;
                        this.DisplayString(StringUtility.NumberToString(arg));
                        break;
                    }

                    case 'x':
                    {
                        // hex number
                        ushort arg = ushort.Parse(args[currentArgument].ToString(), NumberStyles.Integer, CultureInfo.CurrentCulture);
                        currentArgument++;
                        this.DisplayString(StringUtility.NumberToHexString(arg));
                        break;
                    }

                    case 'c':
                    {
                        // character
                        char   arg = '\0';
                        string s   = args[currentArgument].ToString();
                        if (s.Length > 0)
                        {
                            arg = s[0];
                        }

                        currentArgument++;
                        this.DisplayCharacter(arg);
                        break;
                    }

                    default:
                    {
                        // not recognised
                        this.DisplayCharacter('%');
                        currentCharacter--;
                        break;
                    }
                    }
                }

                currentCharacter++;
            }

            this.UpdateTextRegion();
        }