예제 #1
0
        /// <summary>
        /// 指定したメッセージを表示します。ユーザーがキーを入力するまで処理を待機します。
        /// </summary>
        /// <param name="message">表示するメッセージ。</param>
        public static void Show(string message)
        {
            InternalShow(message);

            var input = new VirtualInput();

            while (true)
            {
                switch (input.GetKey())
                {
                case VirtualKey.Commit:
                    return;

                case VirtualKey.Quit:
                    throw new OperationCanceledException();
                }
            }
        }
예제 #2
0
        /// <summary>
        /// 指定した選択肢の一覧を表示し、ユーザーが選択した選択肢を返します。
        /// </summary>
        /// <param name="message">表示するメッセージ。</param>
        /// <param name="choices">表示する選択肢の一覧。</param>
        /// <returns>ユーザーが選択した選択肢を返します。</returns>
        public static Choice ShowChoices(string message, params Choice[] choices)
        {
            if (choices == null)
            {
                throw new ArgumentNullException("choices");
            }
            if (!choices.Any())
            {
                throw new ArgumentException("選択肢が一つもありません。", "choices");
            }

            const int MaxChoicesCount = 9;
            int       count           = choices.Count();

            if (count > MaxChoicesCount)
            {
                throw new ArgumentException("選択肢の上限は 9 つまでです。");
            }

            InternalShow(message);
            Console.WriteLine();

            // 選択肢のキー番号は 1 始まりとする
            foreach (var choice in choices.Select((c, i) => new { Value = c, Index = i + 1 }))
            {
                Console.WriteLine(string.Format("  {0}: {1}", choice.Index, choice.Value.Message));
            }

            var input = new VirtualInput();

            while (true)
            {
                switch (input.GetKey())
                {
                // ↓クソみたいなハードコードだけどいい子は真似しちゃダメだぞ☆
                case VirtualKey.Num1:
                    if (count > 0)
                    {
                        return(choices[0]);
                    }
                    break;

                case VirtualKey.Num2:
                    if (count > 1)
                    {
                        return(choices[1]);
                    }
                    break;

                case VirtualKey.Num3:
                    if (count > 2)
                    {
                        return(choices[2]);
                    }
                    break;

                case VirtualKey.Num4:
                    if (count > 3)
                    {
                        return(choices[3]);
                    }
                    break;

                case VirtualKey.Num5:
                    if (count > 4)
                    {
                        return(choices[4]);
                    }
                    break;

                case VirtualKey.Num6:
                    if (count > 5)
                    {
                        return(choices[5]);
                    }
                    break;

                case VirtualKey.Num7:
                    if (count > 6)
                    {
                        return(choices[6]);
                    }
                    break;

                case VirtualKey.Num8:
                    if (count > 7)
                    {
                        return(choices[7]);
                    }
                    break;

                case VirtualKey.Num9:
                    if (count > 8)
                    {
                        return(choices[8]);
                    }
                    break;

                case VirtualKey.Quit:
                    throw new OperationCanceledException();
                }
            }
        }