在C ++模式下使用VS 2017。
我有完美的MyForm.h。它有一个MyForm类,它有一堆元素和方法,包括一个名为“log()”的元素和方法。它需要一些文本作为输入,并将其添加到窗体上的TextBox。
我添加了另一个名为Settings.h的表单。它也很完美,但我希望能够使用MyForm的log()方法从“设置”表单中记录内容。
花了一天的时间阅读通过阴险刺激MSDN文档 - 或缺乏它,MSDN论坛线程似乎从来没有解决实际问题,我在这里寻求帮助。
我知道我应该使用C#。但是我已经用C ++ / CLI编写了50%的项目,并且不能真正重做C#中的所有内容。
这里有两个相关的问题,第一个是你的第二个表单需要以某种方式获取第一个表单的实例。这是通过ctor参数,属性还是其他方式取决于您的设计。
第二个问题是你需要确保第二个需要的第一个表单的任何方法/属性是公共的,或者第二个表单类是第一个表单的朋友。
免责声明:我没有使用VS2017所以我会发布几乎标准的C ++,我希望这对你有用。(我没有测试过这个但它应该可以工作)
//include MyForm.h //uncomment this if MyForm ^ is declared here
class Settings{
private:
void *mForm; //pointer to the main form -- or MyForm* but with void* we have more flexibility to add different loggers
//MyForm ^ mForm; //replace void* mForm with this
public:
Settings(void *mF) : mForm(mF){}
//Settings(MyForm ^ mF) : mForm(mF){}
void CallMainLog(std::string &str);
};
在Settings.cpp中,添加以下内容
#include "MyForm.h"
#include "Settings.h" //remove this include if MyForm ^ is declared in the header
void Settings::CallMainLog(std::string &str){
((MyForm*)mForm)->addlog(str); //this
//mForm->addLog(str);
}