创建不可见的TComponent派生类来处理大型Form的特定部分是否安全?

问题描述

在某些情况下,大表格的某些部分应可以其他形式重复使用。 在这种情况下,建议的方法是创建从现有VCL类之一派生的新组件。 但是,准备将其用于视觉设计器需要花费更多时间。 一个更简单的解决方案是使用中间步骤,其中受影响的元素组由新创建的聚合器类处理,该聚合器类充当控制器。 Controller类不需要拥有这些元素,但可能需要提供其自己的方法来处理点击事件。

下面是说明所描述方法的代码示例。 问题:它有多安全? 可以吗 导致应用程序崩溃?

class MyController
{
public:
    // for initialization:
    TPanel *pnl;
    TCheckBox *cb1;
    TCheckBox *cb2;
    TCheckBox *cb3;
    TEdit inpt;

    void SetAdditionalParameters(int a,int b,int c)
    {
        // ... more code (source.cpp) ... //
        this->a = a;
        this->b = b;
        this->c = c;
    }

    // public interface: 
    void DoAction1(int param);
    void DoAction2(int param);
    void DoAction3(int param);

private:
    int a,b,c;

    // internal functions
    void InternalFunc();

    // internal event handlers 
    void __fastcall InternaOnClick(TObject *Sender);
};

class MyBigForm : public Form
{
    __published:    // IDE-managed Components
    TImage *imgBack;
    // ... more members ...// 
    // Elements to be controlled below:
    TPanel *pnl;
    TCheckBox *cb1;
    TCheckBox *cb2;
    TCheckBox *cb3;
    TEdit inpt;
    // end elements to be controlled

public:
    __fastcall MyBigForm(TComponent* Owner);
    virtual __fastcall ~MyBigForm(void);

    bool __fastcall Init()
    {
        // ... more code ... // 
        subView.pnl = pnl;
        subView.cb1 = cb1;
        subView.cb2 = cb2;
        subView.cb3 = cb3;
        subView.inpt = inpt;
        subView.SetAdditionalParameters(1,2,3);
        // don't care about delegated elements (use MyController interface)
    }

private:
    MyController subView;
};

更新 正如在下面的评论中指出的那样,有一种更好的方法-通过使用TFrame代替。

我是VCL库的新手,并且我承认如果VCL在运行时重新创建表单组件,我的方法可能会导致崩溃。 所以我将原来的问题改写为: VCL是否可以在运行时重新创建从IDE手动添加到表单的组件?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...