VC ++ - 从另一个表单更改表单元素

时间:2017-12-19 18:08:42

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

在C ++模式下使用VS 2017。

我有完美的MyForm.h。它有一个MyForm类,它有一堆元素和方法,包括一个名为" log()"。它需要一些文本作为输入,并将其添加到表单上的TextBox。

我添加了另一个名为Settings.h的表单。它也很完美,但我希望能够使用MyForm的log()方法从设置表单中记录内容。

在花了一天的时间阅读通过阴险刺激的MSDN文档 - 或者缺乏它,MSDN论坛帖子似乎永远无法解决实际问题,我在这里寻求帮助。

我知道我应该使用C#。但是我已经用C ++ / CLI编写了50%的项目,并且无法在C#中重做所有内容。

2 个答案:

答案 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);
}