c# - 来自 Console.ReadKey() 的奇怪行为

标签 c# console-application

输出看起来像这样:

 ]      [ Your input is: ffffffwwqqqwffasfffffffw
    >

当您使用 BACKSPACE 时,这本来是不可能的, 为什么会这样

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace ConsoleApp7
{
    class Program
    {
        public static string input;

        static Program()
        {
            input = string.Empty;
        }

        static void Main(string[] args)
        {
            while (true)
            {
                ConsoleKeyInfo consoleKeyInfo;

                Console.Clear();

                Console.Out.Write($"\r\n\t[ Your input is: {input} ]\r\n\r\n\t>");

                consoleKeyInfo = Console.ReadKey();

                if (consoleKeyInfo.Modifiers == default(ConsoleModifiers))
                    input += consoleKeyInfo.KeyChar;

                Thread.Sleep(250);
            }
        }
    }
}

最佳答案

退格键是供 ReadKey 处理的有效字符,当您将退格键连接到字符串时,它将从输出的字符串中删除最后一个字符。您可以检查按下的键是否为退格键并忽略它。

if (consoleKeyInfo.Modifiers == default(ConsoleModifiers) && consoleKeyInfo.Key != ConsoleKey.Backspace)
    input += consoleKeyInfo.KeyChar;

关于c# - 来自 Console.ReadKey() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57507981/

相关文章:

c# - LINQ 在 Where 字符串中聚合

c# - 自定义控件的 Controls.Count 零

c# - 没有使用 log4net 从 .NET 应用程序写入 Windows Server 2008 磁盘的权限

.net - AttachConsole(-1),但 Console.WriteLine 不会输出到父命令提示符?

c++ - 显示 n 皇后问题的多个可能答案

vb.net - 使用 VB.NET 控制台内的真彩色支持

c# - 从 C# 应用程序调用 C++ DLL

c# - 如何使用 Roslyn MSBuildWorkspace 查找 C# 项目的 'obj' 目录?

c# - 为什么我的控制台应用程序有命令历史记录?

c - winapi FillConsoleOutputAttribute 程序崩溃