Hi
Ich hab nun ein Problem und finde dafür einfach keine Lösung.
Ich hoffe ihr könnt mir weiterhelfen.
Ich habe eine Konsolenanwendung, die im oberen Teil vier Statuszeilen hat, darunter dann eine Zeile in die man Befehle eingeben kann und darunter wiederum die Antwort des Programms. Das ganze sieht in etwa so aus:
[pre]#######################
## Statusmeldungungen Zeile 1 ##
## Statusmeldungungen Zeile 2 ##
#######################
Command:
Programm sagt A
Programm sagt B
Programm sagt C
....[/pre]
Ich hab soweit alles hinbekommen außer einer winzig wichtigen Kleinigkeit:
Ich krieg den Cursor nicht immer hinter das letzte Zeichen in der 5. Zeile.
Mit Console.SetCursorPosition(9,4) krieg ichs hinter den Doppelpunkt, ABER wenn ich was eingebe, dann bleibt der natürlich auch dort und zwar, weil ein Timer nebenbei läuft, der die Statusmeldungen erneuert und dabei den Cursor natürlich kurz verschiebt.
Das Problem ist jetzt also in der Command-Zeile den Cursor wieder hinter das letzte Zeichen zu schieben.
Jemand eine Idee?
Danke schonmal im Voraus.
PS:
Console.CursorLeft liefert mit immer den Wert 25, unabhängig wieviel in der Zeile schon drin steht - das kann es also nicht sein, oder?
Visit me @ www.beremote.net
Hallo,
du könntest da theoretisch den String von der Zeile fünf auslesen und dann mit string.Lenght herausfinden wie viele Zeichen der hat.
Anschliessend setzt du den Curuso auf (mystring.Length,4);
PS: Ich kenne mich mit ConsolenAnwendungen nicht aus, bin also nicht sicher ob ich da keinen Müll gepostet habe 🙂
Gruss
Michael
Da ist die Frage, wie ich eine bestimmte Zeile komplett auslese...
Das gleiche habe ich nämlich auch schon gedacht, aber bin an der Frage über dieser Zeile gescheitert.
Visit me @ www.beremote.net
Ein hoch auf Intellisense bzw. die MSDN-Doku, nach einer kurzen Suche und ein wenig English-Kenntnissen dürfte man ziemlich schnell über
string abc = Console.ReadLine()
stolpern 😉
@SHyx0rmZ:
das ist aber nicht die Antwort auf die Frage des Fragenden.....
Hallo Hunv,
verwende zum Einlesen Console.ReadKey (true), damit der Tastendruck nicht automatisch angezeigt wird, also kein Echo ausgibt (Achtung die deutsche Doku .NET 2.0 ist falsch; da steht, dass bei true die Eingabe angezeigt wird; das ist aber nicht so und in der englischen Doku steht es auch richtig). Dann musst du dich natürlich um die Ausgabe selbst kümmern. Genau das gibt dir aber die Gelegenheit, vor dem Ausgeben die richtige Cursor-Position zu setzen. Soweit so gut.
Leider musst du durch dieses Vorgehen die Editermöglichkeiten selbst implementieren. Also Backspace kannst du nicht einfach ausgeben, sondern musst den Text hinter dem Cursor um eine Stelle nach links verschieben. Da man den Text, der da seht mit .NET-Mitteln nicht auslesen kann, musst du dir also den aktuellen Stand der Eingabe als selbst merken, z.B. in einer List<char> oder einem StringBuilder.
herbivore
Okay, danke sehr. Es geht soweit. Nur habe ich ein Problem mit dem Backspace:
ConsoleKeyInfo pressd = Console.ReadKey(true);
if (pressd.Key == ConsoleKey.Backspace)
{
if (consoleCommand.Length > 0)
{
consoleCommand = consoleCommand.Substring(0, consoleCommand.Length - 1);
}
}
else if (...)
{
....
}
else
{
consoleCommand += pressd.KeyChar;
}
Console.SetCursorPosition(0, 4);
Console.WriteLine("Consolecommand: " + consoleCommand);
In consoleCommand wird dabei das eingegebene gespeichert. Wenn ich durch Backspace jetzt den letzten Buchstaben wegmache, ist der aus consoleCommand weg, aber das Konsolenfenster Zeichnet die Zeile nur bis zum letzten Zeichen von consoleCommand neu, wodurch der gelöschte Buchstabe ja trotzdem noch da ist. Gibt es die Möglichkeit eine ganze Zeile neu zu zeichnen oder muss ich die manuell mit Leerzeichen vollstopfen?
Visit me @ www.beremote.net
Hallo Hunv,
letzteres
herbivore