首页 文章

在.NET中创建命令行文本编辑器的建议

提问于
浏览
1

我想用.Net创建一个命令行文本编辑器 .

我总是做GUI应用程序,所以我对这个任务的整个交易有点迷失 . 我需要知道的第一件事是如何创建一个可滚动的编辑器区域 . 我可以写任何我想要的地方并向上和向下移动 . 也许存在一个我没有找到的随时可用的框架 . 因此,我正在征求意见 .

另一件事是如何在滚动时创建一个不随编辑区移动的菜单栏 .

总结一下,我想为Windows控制台创建一个非常简单的编辑器,如EDIT .

1 回答

  • 1

    我不知道CUA意味着什么,但......
    您可以使用Console.SetCursorPosition()来设置光标的位置,以便在您需要的任何地方进行写入 .

    例:

    public void Run()
    {
        Console.WriteLine("Hello, World.");
        Console.WriteLine("buffer size: (w,h)= ({0},{1})", Console.BufferWidth, Console.BufferHeight);
        Console.WriteLine("position= ({0},{1})", Console.CursorLeft, Console.CursorTop);
        Console.WriteLine("Hello, again.");
        Console.WriteLine("position= ({0},{1})", Console.CursorLeft, Console.CursorTop);
        int x= 2000;
        Console.WriteLine("\n\n\nCounting to {0}...", x);
        int left= Console.CursorLeft;
        int top= Console.CursorTop;
        for (int i= 0; i < x; i++)
        {
            Thread.Sleep(5);
            Console.SetCursorPosition(left, top);
            Console.Write("{0,6}",i);
        }
        Console.WriteLine("\n\n\ndone.");
    }
    

    有了这种功能,您就可以构建更强大的小部件,如菜单栏,命令栏等 .

    我不知道如何仅使用托管代码在控制台中的给定位置“读取”文本;你可以通过pInvoke来做到这一点 . 您需要从屏幕上阅读以支持剪切/粘贴操作,搜索等 . 即使有pInvoke的可能性,我也建议采用双缓冲写入方法,在托管代码中保存一个缓存,写入屏幕 . 像这样的东西:

    http://code.google.com/p/console-forms/source/browse/trunk/Console.Forms/Console.Forms/Drawing/ConsoleCanvas.cs?spec=svn9&r=9

    然后,当您需要从“控制台”读取时,只需从缓冲区中读取即可 . 这避免了每次读取都超过pInvoke阈值,这是很昂贵的 .

    使用这些成分,您可以获得控制台模式编辑器的基本构建块 .

相关问题