通过VC ++中的C ++代码访问GUI组件

时间:2014-11-13 11:40:32

标签: c++ windows winforms visual-c++ c++-cli

我已经在VC ++ 2010 Express版本中创建了一个Windows窗体项目。所以,在那个项目中,我创建了一个Form,它只有一个按钮和一个文本框。此表单的名称为Form1

此按钮称为函数FD,写在同一项目的.cpp文件中。但是,在运行代码时,我需要使用一些文本更新文本框。我想通过.cpp文件访问文本框。

我尝试过以下方法:
我收录了#include "Form1.h",然后写了textBox1->Text="XYZ"。但是,在构建它时,它说找不到任何名为textBox1的成员。

如何从.cpp文件访问文本框?

编辑:
FD.cpp

#include<stdafx.h>
#include "Form1.h" 
... //other includes  

void abc()
{
    //Some code
    textBox1->Text="String to be displayed."
    //Some code
}

Form1.h
这是一个简单的GUI表单,其中添加了一个名为button1的按钮和一个名为textBox1的文本框。

#include<FD.h>
//code generated by the GUI
void button1_click()
{
    abc();
}

2 个答案:

答案 0 :(得分:2)

// FD.cpp
void abc(Form1^ f)
{
    // Assuming that textBox1 is public. If not, make it public or make
    // public get property
    f->textBox1->Text="String to be displayed."
    //Some code
}

// Form1.h
void button1_click()
{
    abc(this);
}

或者:

// FD.cpp
void abc(TextBox^ t)
{
    t->Text="String to be displayed."
    //Some code
}

// Form1.h
void button1_click()
{
    abc(textBox1);
}

另一种方法:将abc方法返回类型String^并将其返回值设置为Form1textBox1。优势:abc对UI级别一无所知。另一种方式:事件http://msdn.microsoft.com/en-us/library/58cwt3zh.aspx

答案 1 :(得分:0)

您收到此错误的原因是您尚未指定的textBox 。仅#include头文件是不够的,您需要找到与Form1对象进行通信的方法。您可以通过多种方式完成此任务。

  1. 使用可以从任何地方访问的主Form1实例的全局指针
  2. 使用指向传递的主Form1实例的本地指针,可以调用
  3. 提供可以操作类中的数据的朋友功能(不推荐),
  4. 我会选择2。