我创建了一个名为Project08的Windows窗体应用程序。它包含文件 Form1.h , Form2.h 和 Project08.cpp 以及其他一些文件。我的使用场景简称如下:
如何将用户的名称返回给Project08.cpp?我的Project08.cpp如下。我的代码下面是一个很好的方法吗?如果没有,你能推荐另一种方式吗?
// Project08.cpp : main project file.
#include "stdafx.h"
#include "Form1.h"
#include "Form2.h"
#include <stdio.h>
using namespace Project08;
[STAThreadAttribute] int main(array<System::String ^> ^args) {
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it
Application::Run(gcnew Form1());
// assign user's name to a string here
Application::Run(gcnew Form2());
return 0; }
答案 0 :(得分:0)
如果我理解你,你在Form1中有一些文本字段,用户输入他/她的名字。您需要将该值返回给调用Application::Run(Form^)
为了实现这一点,我不会匿名创建Form1的实例。我会做一个指针/引用它,以便在构造之后我可以访问它。
Form1^ form1 = gcnew Form1();
Application::Run(form1);
然后你需要在Form1类中做一些事情。首先,当您单击该按钮时,需要保存输入字段的文本,因为该窗体将使Dispose上的所有组件无效。在按钮单击事件上添加单击处理程序,以在类成员变量中保存输入组件的文本(在此示例中为TextBox):
class Form1 [...]
{
[...]
private:
System::String^ m_Name; // Create a member variable for the value
[...]
}
// Add a click Handler for your Button (do this in the Designer) and save the Text of the Text Box in it
System::Void Form1::button1_Click(System::Object^ sender, System::EventArgs^ e)
{
m_Name = textBoxName->Text;
}
然后我会为保存的值添加一个getter方法,稍后您可以通过主方法调用该方法:
System::String^ Form1::getUsername()
{
return this->m_Name; // return the last saved Text of your Input control
}
只要表单显示, Application::Run()
就会停止执行的线程,所以在Project08.cpp文件中你会有:
[...]
Form1^ form1 = gcnew Form1(); // Create the instance and keep a pointer to it
Application::Run(form1); // Display the Form
System::String^ name = form1->getUsername(); // Get the saved Name after the Form disposed
// Do stuff with the name in Form 2
Application:Run(gcnew Form2(name));
[...]