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

问题描述 投票:0回答:2

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

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

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

花了一天的时间阅读通过阴险刺激MSDN文档 - 或缺乏它,MSDN论坛线程似乎从来没有解决实际问题,我在这里寻求帮助。

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

winforms visual-studio c++-cli
2个回答
0
投票

这里有两个相关的问题,第一个是你的第二个表单需要以某种方式获取第一个表单的实例。这是通过ctor参数,属性还是其他方式取决于您的设计。

第二个问题是你需要确保第二个需要的第一个表单的任何方法/属性是公共的,或者第二个表单类是第一个表单的朋友。


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);
}
© www.soinside.com 2019 - 2024. All rights reserved.