如何解决创建不可见的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 举报,一经查实,本站将立刻删除。