【问题标题】:Accessing GUI components through C++ code in VC++在 VC++ 中通过 C++ 代码访问 GUI 组件
【发布时间】:2015-01-10 13:14:01
【问题描述】:

我在 VC++ 2010 Express 版本中创建了一个 Windows 窗体项目。所以,在那个项目中,我创建了一个表单,它只有 1 个按钮和 1 个文本框。此表单的名称是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();
}

【问题讨论】:

  • 你用的是win API还是MFC?
  • 将 Form1^ 引用作为参数传递给方法。
  • 你试过 textBox1.Text="XYZ";
  • @AliKazmi,我确实尝试过。它不起作用。
  • @AlexFarber,我不知道如何通过引用传递 Form1。你能给我一些示例代码吗?

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


【解决方案1】:

您收到此错误的原因是您没有指定 谁的文本框#include 头文件是不够的,你需要想办法和你的Form1 对象通信。您可以通过多种方式做到这一点。

  1. 使用全局指针指向可以从任何地方访问的主 Form1 实例,
  2. 使用指向您的主 Form1 实例的本地指针,该指针被传递并可以被调用,
  3. 提供可以操作类中数据的友元函数(不推荐),

我会选择 2。

【讨论】:

  • 我需要一些示例代码来实现#2,你能给我一些代码吗?
  • 好吧,你实现了你的Form1.cpp文件了吗?
【解决方案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^,并将Form1中的返回值设置为textBox1。优势:abc 对 UI 级别一无所知。还有一种方式:事件http://msdn.microsoft.com/en-us/library/58cwt3zh.aspx

【讨论】:

  • 只是一个问题。不过,可能看起来很傻。 Form1末尾的克拉是多少?这个^。我在很多地方都观察过它,但我似乎无法弄清楚为什么要添加它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多