Laden...

[Konsolenanwendung] Cursor hinter letztes Zeichen einer Zeile setzen

Erstellt von Hunv vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.115 Views
Hunv Themenstarter:in
193 Beiträge seit 2005
vor 15 Jahren
[Konsolenanwendung] Cursor hinter letztes Zeichen einer Zeile setzen

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

3.430 Beiträge seit 2007
vor 15 Jahren

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

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 15 Jahren

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

10 Beiträge seit 2008
vor 15 Jahren

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 😉

M
205 Beiträge seit 2008
vor 15 Jahren

@SHyx0rmZ:

das ist aber nicht die Antwort auf die Frage des Fragenden.....

49.485 Beiträge seit 2005
vor 15 Jahren

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

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 15 Jahren

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

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Hunv,

letzteres

herbivore

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 15 Jahren

Hmm, schade, aber trotzdem danke

Visit me @ www.beremote.net