c# Console App KeyPress 检查

c# ConsoleApp KeyPressed check

我需要检查按下哪个键,如果是 LeftArrow 做某事,如果是 RightArrow 做其他事情,但是当按下 none 键时,主循环必须继续。

我有这个代码,但是当处理到这部分时它只是在等待按键,当按下 none 键时它不会跳过它。第二个问题是我需要将“+”在字段中的位置更改为 1,如果我长时间按下该键,它会移动 XXX

 if (Console.ReadKey(true).Key == ConsoleKey.LeftArrow)
            {

                int levo;
                levo = pozice;
                if (levo == 1) //Zajištění, že se nedosáhne hodnoty vyšší, než je rozsah pole  
                {
                    levo = levo + 1;
                }
                p18[levo - 1] = "*+*"; //Samotný posun panáčka
                p18[levo] = "   "; //Smazání panáčka z původní pozice

            }


            if (Console.ReadKey(true).Key == ConsoleKey.RightArrow)
                {

                        int pravo;
                        pravo = pozice;
                        if (pravo == 18) //Zajištění, že se nedosáhne hodnoty vyšší, než je rozsah pole
                        {
                            pravo = pravo - 1;
                        }
                        p18[pravo + 1] = "*+*"; //Samotný posun panáčka
                        p18[pravo] = "   "; //Smazání panáčka z původní pozice

                }

您应该在每个循环中只从控制台读取一次密钥,然后根据读取的值执行操作。在编写代码时,您将在每个 if 语句中读取一个新键。下面是执行此操作的代码的修改版本。

        var key = Console.ReadKey(true).Key;

        if (key == ConsoleKey.LeftArrow)
        {
            int levo = pozice;
            if (levo == 1) //Zajištění, že se nedosáhne hodnoty vyšší, než je rozsah pole  
            {
                levo = levo + 1;
            }
            p18[levo - 1] = "*+*"; //Samotný posun panáčka
            p18[levo] = "   "; //Smazání panáčka z původní pozice

        }


        if (key == ConsoleKey.RightArrow)
        {
            int pravo = pozice;
            if (pravo == 18) //Zajištění, že se nedosáhne hodnoty vyšší, než je rozsah pole
            {
                pravo = pravo - 1;
            }
            p18[pravo + 1] = "*+*"; //Samotný posun panáčka
            p18[pravo] = "   "; //Smazání panáčka z původní pozice
        }