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?
Antworten
Zu viele Anzeigen?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)
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.