Изменить текст в приложении консоли С#?
Возможный дубликат:
Расширенные консоли ввода-вывода С#
Есть ли способ редактировать текст в консольном приложении С#? Другими словами, можно ли разместить предварительно заданный текст в командной строке, чтобы пользователь мог изменить текст и затем повторно отправить его в приложение?
Ответы
Ответ 1
Одна вещь, которая пришла мне на ум, - это... имитировать нажатия клавиш.
И простой пример использования SendKeys:
static void Main(string[] args)
{
Console.Write("Your editable text:");
SendKeys.SendWait("hello"); //hello text will be editable :)
Console.ReadLine();
}
ПРИМЕЧАНИЕ. Это работает только в активном окне.
Ответ 2
Да. Вам нужно использовать метод SetCursorPosition of Console. Пример:
Console.WriteLine("hello");
Console.SetCursorPosition(4, 0);
Console.WriteLine(" ");
Он покажет "ад"
Вам нужна специальная реализация метода ReadLine, которая позволяет вам редактировать n-символы (строка по умолчанию) в консоли и возвращать строку от пользователя. Это мой пример:
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 ());
}
В этом методе отобразится строка Default. Надеюсь, я правильно понял вашу проблему (я сомневаюсь в ней)