我正在编写一个主要在控制台中运行的程序,但有一段时间,我需要使用表单。
我创建了一个Windows窗体,然后将输出切换到控制台。之后,我又向项目中添加了一个表单(Form2),现在我的代码看起来像这样:
#include "stdafx.h"
#include <iostream> // For std::cout and such
#include "Form1.h"
#include "Form2.h"
using namespace testing_forms;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
/* Instructions Block 1 */
Application::Run(gcnew Form1());
/* Instructions Block 2 */
Application::Run(gcnew Form2());
/* Instructions Block 3 */
return 0;
}
所以,基本上,程序运行第一个指令块,然后调用一个表格,然后运行第二个指令块,依此类推。
然而,这不允许我在表单和控制台之间共享数据,因为它只是一个程序,我真的需要,例如用户名,整数等。
我能想到的唯一方法是保存一个文本文件,并从控制台和表格中写入/读取信息以共享信息(我没有测试过),但是,说实话,我不是我真的很喜欢这个解决方案。
那么,如何使用(最好)只使用变量在Windows窗体和控制台之间来回共享数据呢?
答案 0 :(得分:1)
有很多方法 - 您可以使用套接字,管道,消息队列,您可以在数据库中存储信息,您可以在控制台应用程序中托管WCF服务等。
但我不会讨论哪些是最好的。真的,如果你遇到这个问题,那么很可能你应该把你的整个解决方案变成一个Windows Forms / WPF应用程序。在同一个应用程序的表单之间传递信息要容易得多,特别是如果它们可以相互引用。他们只需要调用彼此的方法,或访问彼此的属性,或者去寻找相同的静态类。所有这些都在相同的环境中,没有跨越任何应用程序边界。
如果您想将控制台保留在那里,您可以隐藏主窗体并打开一个单独的控制台应用程序。然后,您可以使用任何相关文本提供此控制台。
深思熟虑。