手头有一个winform程序,其中某个功能模块实现的功能较多,而且有不少的拓展,不可能以listbox、combobox的方式显示在窗体中。
这时想到了使用命令行方式,但是未找到在winform下创建新的console窗口的方法。
之后想到了利用多行textbox模拟(其实这个更合乎本意,因为原本的设想就是将其放在一个tab中),但是如果是只读,则无法捕获用户输入的数据;如果是非只读,那么在用户删除输入内容时原有的内容可能会被误删。
整个程序就这样卡在了这里,求高人解答,最好能嵌套在tabcontrol中,利用第三方控件也是可以的。
(另写一个命令行程序来调用很不实际,初始化参数中有一个byte[256]的数组无法传递,借助临时文件又太繁琐了)

解决方案 »

  1.   

    你可以像Visual Studio一样启动一个控制行进程然后重定向其输入输出到你的程序。不过你的模块似乎是进程内的?Windows Forms没有合适的控件可以再找别家的嘛,不一定非要切换到对用户不友好的命令行。
      

  2.   

    另外这个模块确实是进程内部的,初始化这个模块有一系列配置参数,启动新的命令行程序的话初始化参数传递是个问题(主要是一个byte[256],还有一个自定义的struct)。另外为了美观起见这个模块的外壳是与其他模块并列放置于一个tabcontrol中,启动新的命令行还要想方法将命令行窗体作为子窗体,太繁琐(而且还不知效果如何)。
      

  3.   

    自己做一个吧,很简单
    每次系统输出的时候记录下文本的长度
    然后在可能更改文本的相关事件里判断一下插入点或选区的位置
    如果处于不应该被更改的内容中就中断掉。我的F# Interactive就是这么做的。因为要支持彩色输出,所以继承的是RichTextBox。