0

コンソール アプリケーションのテキスト ボックスのようなものを作成しようとしていますがConsole.In、ユーザー入力から定義された文字数のみを読み取るように制限するにはどうすればよいですか?

編集

私はループウェイに行くことができませんReadkey()。矢印キーを使用して左から右に移動したり、Del または Backspace を使用して入力を編集したり、検証用のキーをいくつか使用したりするなど、そのボックスを操作する必要があります。ReadKeyそれらのキーを " " (スペース) として出力していますが、押しすぎが発生する可能性があるため、押されたキーの数を数えることはできません(このプロジェクトでは、上書きが必要です!)

指定された場所でバッファから読み取り、そのフィールドの最大長に達したときにカーソルを別の場所に設定するようなことを考えています。このようにできますか?

私のチャンスは何ですか?私は本当にあなたの助けが必要です

4

3 に答える 3

1

私はそれができるかどうか知りたかったのですが、ここに私が思いついたものがあります:

    private static string ReadBox(int maxLen)
    {
        var sb = new StringBuilder();
        int pos = 0;
        bool done = false;      
        int start = Console.CursorLeft;

        while (!done)
        {
            var ki = Console.ReadKey(true);

            switch (ki.Key)
            {
                case ConsoleKey.Enter:
                    done = true;
                    break;

                case ConsoleKey.Delete:
                    // todo
                    break;

                case ConsoleKey.Backspace:
                    if (pos > 0)
                    {
                        pos -= 1;
                        sb.Remove(pos, 1);
                    }                                
                    break;

                case ConsoleKey.LeftArrow:
                    if (pos > 0) pos -= 1;
                    break;

                case ConsoleKey.RightArrow:
                    if (pos < sb.Length) pos += 1;
                    break;

                default:
                    if (ki.KeyChar >= ' ')  // simple filter
                    {
                        sb.Insert(pos, ki.KeyChar);
                        pos += 1;
                    }
                    break;
            }
            Console.CursorLeft = start;
            Console.Write(sb.ToString());
            Console.CursorLeft = start + pos;                
        }
        return sb.ToString();
    }

実際には Console.In バッファを使用していないことに注意してください。ここではバイパスされます。ああ、すべての始まりとなった機能、maxlength を省略しました。しかし、それは簡単に実装できます。

しかし、もしあなたがこの種の UI に真剣に取り組んでいるなら、私はこのような curses ライブラリを探すでしょう. 辺りを探す。

于 2010-04-12T18:34:58.497 に答える
1

Console.ReadLine() などに制限を設定することはできません。ただし、たとえば、ループ Console.ReadLine() を作成して、その入力を検証することはできます。

于 2010-04-11T20:47:15.800 に答える
0

エコーを防ぐためReadKeyにループとパスを呼び出すことができます。true

于 2010-04-11T21:04:55.807 に答える