在控制台应用程序和Windows窗体之间共享数据

时间:2013-08-19 18:55:47

标签: c++ winforms console-application

我正在编写一个主要在控制台中运行的程序,但有一段时间,我需要使用表单。

我创建了一个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窗体和控制台之间来回共享数据呢?

1 个答案:

答案 0 :(得分:1)

有很多方法 - 您可以使用套接字,管道,消息队列,您可以在数据库中存储信息,您可以在控制台应用程序中托管WCF服务等。

但我不会讨论哪些是最好的。真的,如果你遇到这个问题,那么很可能你应该把你的整个解决方案变成一个Windows Forms / WPF应用程序。在同一个应用程序的表单之间传递信息要容易得多,特别是如果它们可以相互引用。他们只需要调用彼此的方法,或访问彼此的属性,或者去寻找相同的静态类。所有这些都在相同的环境中,没有跨越任何应用程序边界。

如果您想将控制台保留在那里,您可以隐藏主窗体并打开一个单独的控制台应用程序。然后,您可以使用任何相关文本提供此控制台。

深思熟虑。