在C ++模式下使用VS 2017。
我有完美的MyForm.h。它有一个MyForm类,它有一堆元素和方法,包括一个名为" log()"。它需要一些文本作为输入,并将其添加到表单上的TextBox。
我添加了另一个名为Settings.h的表单。它也很完美,但我希望能够使用MyForm的log()方法从设置表单中记录内容。
在花了一天的时间阅读通过阴险刺激的MSDN文档 - 或者缺乏它,MSDN论坛帖子似乎永远无法解决实际问题,我在这里寻求帮助。
我知道我应该使用C#。但是我已经用C ++ / CLI编写了50%的项目,并且无法在C#中重做所有内容。
答案 0 :(得分:0)
这里有两个相关的问题,第一个是你的第二个表单需要以某种方式获取第一个表单的实例。这是通过ctor参数,属性还是其他方式取决于您的设计。
第二个问题是你需要确保第二种形式的第一种形式的任何方法/属性是公共的,或者第二种形式类是第一种形式的朋友。
答案 1 :(得分:0)
免责声明:我没有使用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);
}