Изменить текст в приложении консоли С#?

Возможный дубликат:
Расширенные консоли ввода-вывода С#

Есть ли способ редактировать текст в консольном приложении С#? Другими словами, можно ли разместить предварительно заданный текст в командной строке, чтобы пользователь мог изменить текст и затем повторно отправить его в приложение?

Ответ 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. Надеюсь, я правильно понял вашу проблему (я сомневаюсь в ней)