如何从Windows窗体返回值

时间:2015-05-13 09:53:27

标签: winforms c++-cli

我创建了一个名为Project08的Windows窗体应用程序。它包含文件 Form1.h Form2.h Project08.cpp 以及其他一些文件。我的使用场景简称如下:

  • 程序启动时显示Form1。
  • 用户输入他/她的名字并点击按钮。
  • 单击该按钮时,Form1将关闭,用户的名称将返回到调用Form1的位置。
  • 将返回值分配给字符串。
  • 调用Form2并显示。

如何将用户的名称返回给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; }

1 个答案:

答案 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));
[...]