私はそれができるかどうか知りたかったのですが、ここに私が思いついたものがあります:
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 ライブラリを探すでしょう. 辺りを探す。