Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在控制台应用程序和windows窗体之间共享数据_C++_Winforms_Console Application - Fatal编程技术网

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

C++ 在控制台应用程序和windows窗体之间共享数据,c++,winforms,console-application,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; [STAThreadAttr

我正在编写一个主要在控制台中工作的程序,但偶尔需要使用表单

我创建了一个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;
}
#包括“stdafx.h”
#包括//用于std::cout等
#包括“表格1.h”
#包括“表格2.h”
使用命名空间测试表单;
[属性]
int main(数组^args)
{
//在创建任何控件之前启用Windows XP视觉效果
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
/*指令块1*/
应用程序::运行(gcnewform1());
/*指令块2*/
应用程序::运行(gcnewform2());
/*指令块3*/
返回0;
}
因此,基本上,程序运行第一个指令块,然后调用一个表单,然后运行第二个指令块,依此类推

但是,这不允许我在表单和控制台之间共享数据,因为它只是一个程序,所以我真正需要它,比如用户名、整数等等

我能想到的唯一方法是保存一个文本文件,并从控制台和表单中写入/读取它以共享信息(我没有测试过这个),但是,老实说,我并不喜欢这个解决方案


那么,我如何在windows窗体和控制台之间来回共享数据,最好只使用变量?

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

但我不会在这里讨论哪一个是最好的。实际上,如果您遇到这个问题,那么很可能您应该将整个解决方案设置为Windows窗体/WPF应用程序。在同一应用程序的表单之间传递信息要容易得多,特别是如果它们可以相互引用的话。它们只需要调用彼此的方法,或者访问彼此的属性,或者使用相同的静态类。都在同一个环境中,没有跨越应用程序边界

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


值得思考。

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

但我不会在这里讨论哪一个是最好的。实际上,如果您遇到这个问题,那么很可能您应该将整个解决方案设置为Windows窗体/WPF应用程序。在同一应用程序的表单之间传递信息要容易得多,特别是如果它们可以相互引用的话。它们只需要调用彼此的方法,或者访问彼此的属性,或者使用相同的静态类。都在同一个环境中,没有跨越应用程序边界

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


值得思考。

嗯。。。我想那会管用的,是的。如果你不介意我问的话,我该如何使表格相互参照?因为它们是分开运行的,所以在创建下一个窗体之前,一个窗体不是被破坏了吗?除非我想错了……C++不是我的强项,所以我不能给你答案。但是想想看:
表单
是一个类。你可以举例说明。那么当窗体的属性也是窗体时会发生什么呢?是的,它们可以同时运行。不完全跟随。我有两个不同的表单,在两个不同的文件中,比如Form1.h和Form2.h,在Form1.h中我包含了File2.h。然后,我使用private行向Form1添加了一个属性:Form2^NewForm;然后,在Form1中单击按钮的情况下,我添加了行NewForm=gcnewform2();这个->隐藏();NewForm->textBox1->Text==“打开”;新建窗体->显示对话框();此->显示();上面的行在Form2处于活动状态时隐藏Form1,但在Form2处于运行状态时我无法对Form1执行任何操作,我以前所做的都是无用的。示例:如果在显示表单2之前执行“NewForm->textBox1->Text==“Open”;“文本框仍然显示为空。好吧,忘记我刚才说的。出于某种原因,我使用了两个等号来赋值,这完全是错误的。使用“NewForm->textBox1->Text=“Open”;”时,Form2将显示,文本框上写有“Open”。此外,隐藏Form2而不是关闭它(我使用函数Close()来退出Form2,而不是函数Hide())允许我从Form2检索数据到Form1。非常感谢,我现在可以在表单之间共享数据了。答:接受。。。我想那会管用的,是的。如果你不介意我问的话,我该如何使表格相互参照?因为它们是分开运行的,所以在创建下一个窗体之前,一个窗体不是被破坏了吗?除非我想错了……C++不是我的强项,所以我不能给你答案。但是想想看:
表单
是一个类。你可以举例说明。那么当窗体的属性也是窗体时会发生什么呢?是的,它们可以同时运行。不完全跟随。我有两个不同的表单,在两个不同的文件中,比如Form1.h和Form2.h,在Form1.h中我包含了File2.h。然后,我使用private行向Form1添加了一个属性:Form2^NewForm;然后,在Form1中单击按钮的情况下,我添加了行NewForm=gcnewform2();这个->隐藏();NewForm->textBox1->Text==“打开”;新建窗体->显示对话框();此->显示();上面的行在Form2处于活动状态时隐藏Form1,但在Form2处于运行状态时我无法对Form1执行任何操作,我以前所做的都是无用的。示例:如果我执行“NewForm->textBox1->Text=