在C#控制台应用程序中编辑文本?

时间:2011-09-27 07:11:39

标签: c# .net command-line console console-application

有没有办法在C#控制台应用程序中编辑文本?换句话说,是否可以在命令行上放置预定义的文本,以便用户可以修改文本然后将其重新提交给应用程序?

2 个答案:

答案 0 :(得分:17)

是。您需要使用Console的方法SetCursorPosition。例如:

    Console.WriteLine("hello");
    Console.SetCursorPosition(4, 0);
    Console.WriteLine("      ");

它会显示'地狱' 您需要自定义ReadLine方法的实现,它允许您在Console中编辑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。希望我理解你的问题是正确的(我怀疑它)

答案 1 :(得分:13)

我想到的一件事是......模拟按键。 还有一个使用SendKeys的简单示例:

static void Main(string[] args)
{
    Console.Write("Your editable text:");
    SendKeys.SendWait("hello"); //hello text will be editable :)
    Console.ReadLine();
}

注意:这仅适用于活动窗口。