19 Stimmen

Text in C#-Konsolenanwendung bearbeiten?

Gibt es eine Möglichkeit, Text in einer C#-Konsolenanwendung zu bearbeiten? Mit anderen Worten, ist es möglich, vordefinierten Text in der Befehlszeile zu platzieren, so dass der Benutzer den Text ändern und dann wieder an die Anwendung senden kann?

24voto

Tadeusz Punkte 6125

Ja, Sie müssen die Methode SetCursorPosition von Console verwenden. Beispiel:

    Console.WriteLine("hello");
    Console.SetCursorPosition(4, 0);
    Console.WriteLine("      ");

Es wird 'Hölle' angezeigt Sie benötigen eine benutzerdefinierte Umsetzung der ReadLine-Methode, die es Ihnen ermöglicht, n-Symbole (Standard-String) in der Konsole zu bearbeiten und einen String von einem Benutzer zurückzugeben. Dies ist mein Beispiel:

static string ReadLine(string Default)
{
    int pos = Console.CursorLeft;
    Console.Write(Default);
    ConsoleKeyInfo info;
    List<char> chars = new List<char> ();
    if (string.IsNullOrEmpty(Default) == false) {
        chars.AddRange(Default.ToCharArray());
    }

    while (true)
    {
        info = Console.ReadKey(true);
        if (info.Key == ConsoleKey.Backspace && Console.CursorLeft > pos)
        {
            chars.RemoveAt(chars.Count - 1);
            Console.CursorLeft -= 1;
            Console.Write(' ');
            Console.CursorLeft -= 1;

        }
        else if (info.Key == ConsoleKey.Enter) { Console.Write(Environment.NewLine); break; }
        //Here you need create own checking of symbols
        else if (char.IsLetterOrDigit(info.KeyChar))
        {
            Console.Write(info.KeyChar);
            chars.Add(info.KeyChar);
        }
    }
    return new string(chars.ToArray ());
}

Diese Methode zeigt die Zeichenfolge Standard an. Ich hoffe, ich habe Ihr Problem richtig verstanden (ich bezweifle es)

15voto

Renatas M. Punkte 11458

Eine Sache, die mir in den Sinn kam, ist die Simulation von Tastenanschlägen. Und ein einfaches Beispiel mit SendKeys:

static void Main(string[] args)
{
    Console.Write("Your editable text:");
    SendKeys.SendWait("hello"); //hello text will be editable :)
    Console.ReadLine();
}

HINWEIS: Dies funktioniert nur im aktiven Fenster.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X