Konsola - ReadLine() i przechwytywanie znaku.

Konsola - ReadLine() i przechwytywanie znaku.
A1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0

Witam!
Mam mały problem z konsolą. Użytkownik podaje mi jakąś wartość, a ją przypisuję do zmiennej metodą Console.ReadLine(). Chciałbym jednak, żeby w przypadku gdy użytkownik wpisując treść kliknął klawisz Escape, to żebym mógł przestać pobierać od niego znaki i przekierować go do menu. Kombinowanie z Console.ReadKey() nic mi nie dało. Byłbym naprawdę wdzięczny, gdybyście mi pomogli. Z góry dziękuję.
Pozdrawiam!

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
0

Dlaczego z ReadKey() Ci nie wyszło?

W pętli czytasz wszystko co wciska user, dopóki nie wciśnie escape. Użyj do tego StringBuildera zamiast string. Pokaż to co udało Ci się sklecić to poprawimy ;]

A1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0
Kopiuj
StringBuilder sb = new StringBuilder();
char c;
while ((c = Console.ReadKey().KeyChar) != (char)ConsoleKey.Escape)
{
    sb.Append(c);
} 

Kod działa, tyle, że naciśnięcie Escape'a powoduje pojawienie się na ekranie niechcianej strzałki (symbol Esc?) oraz występują problemy z kasowaniem znaków.

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
0
Anonim1024 napisał(a)
Kopiuj
StringBuilder sb = new StringBuilder();
char c;
while ((c = Console.ReadKey().KeyChar) != (char)ConsoleKey.Escape)
{
    sb.Append(c);
} 

Kod działa, tyle, że naciśnięcie Escape'a powoduje pojawienie się na ekranie niechcianej strzałki (symbol Esc?) oraz występują problemy z kasowaniem znaków.

Jeżeli nie chcesz, żeby wyświetlał na ekranie tego znaku, to użyj ReadKey(false). W tym przypadku musisz wyświetlać samemu wczytane znaki. Jeżeli chodzi o usuwanie to też samemu musisz to wykombinować. Pomoże Ci w tym Console.CursorLeft. Zastanów się czy ten escape jest Ci na pewno potrzebny ;]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.