【问题标题】:Why is a C# console processing multiline paste as Enter key presses?为什么 C# 控制台在按 Enter 键时处理多行粘贴?
【发布时间】:2017-03-26 20:13:33
【问题描述】:

我有一个 C# 应用程序,它处理按键操作,并在按下 Enter 键时中断循环。我遇到的问题是,当发生多行粘贴事件时,控制台将换行解释为按 Enter 键。

不会导致Enter按键的示例:

select something \n from somewhere \n where condition

确实导致Enter按键的示例:

select something
from somewhere
where condition

有人知道为什么会这样吗?有没有什么办法可以阻止这种情况,而无需深入研究WndProc 的东西来拦截粘贴事件?

【问题讨论】:

  • Enter key press do \r\n ,这是在第二个例子中完成的,所以它解释为 Enter key press

标签: c# console newline


【解决方案1】:

在 Windows 上,换行符是 \r\n。当您按下 Enter 键时,将输入这两个字符。因此,如果您在每个 \n 之前放置一个 \r,它们应该被视为换行符。

【讨论】:

    【解决方案2】:

    您好,好像有人使用 Console.ReadLine() 来触发循环中断。

    https://msdn.microsoft.com/pl-pl/library/system.console.readline(v=vs.110).aspx

    在开始新行时有效地循环中断,而不仅仅是按 enter 键。

    【讨论】:

      【解决方案3】:

      据我所知,Enter 按键无法解析回\r\n,所以我认为我们不能根据这些字符进行处理 - 但我能够得到提示(对于无论如何我的情况)如果用户通过询问Console.KeyAvailable粘贴多行文本。

      所以现在,我查看(Key == ConsoleKey.Enter && Console.KeyAvailable == false) 是否确定是否将其处理为“真正的”Enter 键按下(因为在我按下 Enter 键时通常没有可用的键)。

      查看this commit了解更多信息

      【讨论】:

        猜你喜欢
        • 2013-11-20
        • 1970-01-01
        • 1970-01-01
        • 2021-04-19
        • 2023-03-06
        • 2015-05-17
        • 2011-02-28
        • 2022-08-17
        • 1970-01-01
        相关资源
        最近更新 更多