让我解释一下,这就是我想要实现的目标:
Enter name:
F4-Quit
有没有办法显示下一行(F4-Quit)而没有readline等待用户输入 在显示之前?原因是我想,在任何时候退出,即使名称尚未输入(光标在等待),这在许多情况下非常有用,在这种情况下,有人在输入信息的过程中改变了主意并想要退出或返回
如果那不可能会有什么方法呢?
谢谢你!答案 0 :(得分:8)
只需编写自己的ReadLine()版本即可。这是.NET的TryParse()模式中的TryReadLine()版本:
static bool TryReadLine(out string result) {
var buf = new StringBuilder();
for (; ; ) {
var key = Console.ReadKey(true);
if (key.Key == ConsoleKey.F4) {
result = "";
return false;
}
else if (key.Key == ConsoleKey.Enter) {
result = buf.ToString();
return true;
}
else if (key.Key == ConsoleKey.Backspace && buf.Length > 0) {
buf.Remove(buf.Length - 1, 1);
Console.Write("\b \b");
}
else if (key.KeyChar != 0) {
buf.Append(key.KeyChar);
Console.Write(key.KeyChar);
}
}
}
答案 1 :(得分:4)
如果那不可能会有什么方法呢?
解决此问题的最佳方法是使用GUI应用程序。这将消除控制台对您的限制。
通常,如果您想要复杂的用户输入控件,那么UI将比控制台更好。
如果必须使用控制台应用程序,则可能需要在循环中使用Console.ReadKey
而不是Console.ReadLine
,并检查“escape”键击。一旦输入了新的行字符,就可以处理“text”命令/ input / etc.
答案 2 :(得分:2)
这是Jeppe指出的解决方案
public static void Main()
{
ConsoleKeyInfo cki;
Console.Clear();
// Establish an event handler to process key press events.
Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);
while (true) {
Console.Write("Press any key, or 'X' to quit, or ");
Console.WriteLine("CTRL+C to interrupt the read operation:");
// Start a console read operation. Do not display the input.
cki = Console.ReadKey(true);
// this process can be skipped
// Console.WriteLine(" Key pressed: {0}\n", cki.Key);
// Exit if the user pressed the 'X' key.
if (cki.Key == ConsoleKey.F4) break;
}
}
protected static void myHandler(object sender, ConsoleCancelEventArgs args)
{
args.Cancel = true;
go_back_to_main();
}
答案 3 :(得分:1)
如果它不一定是F4键,但您可以使用Ctrl + C或Ctrl + Break,那么您可以使用CancelKeyPress
event。