Announcement

Collapse
No announcement yet.

Cursor in Consolenanwendung nach links Verschieben ohne Zeichen zu löschen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Cursor in Consolenanwendung nach links Verschieben ohne Zeichen zu löschen

    Hallo,

    ich stehe bei einer simplen Consolenanwendung auf dem Schlauch.
    Es soll der Cursor nach Links geschoben werden.
    Dazu habe ich folgenden Code:

    Code:
    static void Main(string[] args)
            {
                ConsoleKeyInfo cki;
                int cursorPosition;
                do
                {
                    cursorPosition = Console.CursorLeft;
                    cki = Console.ReadKey();
    
                    if (cki.Key == ConsoleKey.LeftArrow)
                    {
                        if (cursorPosition > 0)
                        {
                            cursorPosition--;
                            Debug.WriteLine(cursorPosition.ToString());
                            Console.CursorLeft = cursorPosition; //
                        }
                    }
                } while (cki.Key != ConsoleKey.Escape);
            }
    Dabei werden jedoch auch die Zeichen gelöscht.
    Beispiel:

    In der Console steht:

    abcdefghi

    Drücke ich die Pfeiltaste Links
    steht noch
    abcdefgh

    drücke ich nochmal:

    abcdefg

    Habt Ihr eine Idee?

    Gruß

    micha

  • #2
    Ersetz mal ConsoleKey.LeftArrow in der if Abfrage mit irgendwas anderem irgendwas was man auch auf der Console auch als Zeichen sehen kann. Zum Beispiel irgendeinen Buchstaben. Dann verstehst du sofort das Problem.
    [HIGHLIGHT=C#]cki = Console.ReadKey(true);[/HIGHLIGHT]
    Das true ist wichtig. Sonst wird der Tastendruck noch auf die Konsole geschrieben. Du verschiebst jetzt den Cursor nach links und gibst ConsoleKey.LeftArrow an der Stelle aus. ConsoleKey.LeftArrow ist aber ein nicht druckbares Zeichen und sieht auf der Console nur so aus wie ein Leerzeichen.

    Edit : Du brauchst dann natürlich auch noch einen else Zweig. Wenn es nicht ConsoleKey.LeftArrow ist möchtest du ja doch das der Tastendruck auf der Console landet. Da muss also noch ein Console.Write hin.
    Zuletzt editiert von Ralf Jansen; 20.09.2016, 20:44.

    Comment


    • #3
      Hallo Ralf,

      das

      cki = Console.ReadKey(true);

      war die Lösung. Ich hatte mir schon gedacht, dass ConsoleKey.LeftArrow in die Console als nicht lesbares Zeichen gedruckt wird. Ich wusste nur nicht, wie ich das unterbinden kann.

      Vielen Dank.

      Gruß

      micha

      Comment

      Working...
      X