C# 在C语言中如何从键盘上捕捉按键#

C# 在C语言中如何从键盘上捕捉按键#,c#,keyboard,key,try-catch,C#,Keyboard,Key,Try Catch,我有个问题。我需要写一个C#程序 输入:允许用户输入多行文本,按Ctrl+enter完成键入 输出:通过标准化,按时间增长的正确顺序重新排列行 我试过了,但我不知道如何从键盘捕获Ctrl+Enter: 我希望输出像这样 例如: 需要重新排列DateTime您需要创建自己的输入系统以覆盖默认控制台处理程序 您将创建一个到ReadKey(true)的循环,并处理所有所需的键代码,如箭头、退格、删除、字母、数字和Ctrl+Enter 因此,对于每个键,您将要处理的内容重新注入控制台,移动插入符号,删除

我有个问题。我需要写一个C#程序 输入:允许用户输入多行文本,按Ctrl+enter完成键入 输出:通过标准化,按时间增长的正确顺序重新排列行

我试过了,但我不知道如何从键盘捕获Ctrl+Enter:

我希望输出像这样 例如:


需要重新排列DateTime

您需要创建自己的输入系统以覆盖默认控制台处理程序

您将创建一个到
ReadKey(true)
的循环,并处理所有所需的键代码,如箭头、退格、删除、字母、数字和Ctrl+Enter

因此,对于每个键,您将要处理的内容重新注入控制台,移动插入符号,删除字符,然后结束该过程

您还需要管理结果缓冲区

那很有趣

以下是一个示例:

void GetConsoleUserInput()
{
  Console.WriteLine("Enter something:");
  var result = new List<char>();
  int index = 0;
  while ( true )
  {
    var input = Console.ReadKey(true);
    if ( input.Modifiers.HasFlag(ConsoleModifiers.Control) 
      && input.Key.HasFlag(ConsoleKey.Enter) )
      break;
    if ( char.IsLetterOrDigit(input.KeyChar) )
    {
      if (index == result.Count)
        result.Insert(index++, input.KeyChar);
      else
        result[index] = input.KeyChar;
      Console.Write(input.KeyChar);
    }
    else
    if ( input.Key == ConsoleKey.LeftArrow && index > 0 )
    {
      index--;
      Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
    }
    // And so on
  }
  Console.WriteLine();
  Console.WriteLine("You entered: ");
  Console.WriteLine(String.Concat(result));
  Console.WriteLine();
  Console.ReadKey();
}
这就是:

result[posY][posX];
当使用向上和向下箭头时,不要忘记更新与行长度匹配的posX

当它变得复杂时,它是控制台宽度和包装的管理


干得好

您使用什么平台(控制台、表单、WPF、WUP…)?如果适用,您使用什么控件?我使用控制台平台我尝试这种方式,但我可以找到如何捕获Ctrl+Enter:字符串行;ConsoleKeyInfo=Console.ReadKey(true);do{lines=Console.ReadLine();if(info.Key==ConsoleKey.Clear){break;}而(!String.IsNullOrWhiteSpace(lines)| | info.Key!=ConsoleKey.Clear);您需要创建自己的输入系统来覆盖默认的控制台处理程序。您将创建一个到
ReadKey()
的循环,并处理所有需要的键代码,如箭头、退格、删除、字母、数字和Ctrl+Enter。。。因此,对于每个键,您将要处理的内容重新注入控制台,移动插入符号,删除字符,然后结束该过程。当(true){ConsoleKeyInfo input=Console.ReadKey(true);process input…}时,尝试用
编写一些内容。您还需要管理结果缓冲区。那很有趣<代码>if(input.Modifiers.HasFlag(ConsoleModifiers.Control)和&input.Key.HasFlag(ConsoleKey.Enter))中断
对所有要处理的密钥执行相同的操作。在字符串缓冲区中有一个CurrentIndex,当用户在更新显示时按箭头键、退格键、删除键、单独输入或字母/数字等键时移动/del/add char。你也可以设置颜色。
var result = new Dictionary<int, List<char>>();
int posX;
int posY;
result[posY][posX];