聚合组件继承问题

kk_liwei 2002-04-05 12:56:34
加精
举个简单例子:
将TLabel和TEdit(以TEdit为主)聚合为一个组件,发布TEdit的所有事件。我认为有两种方法。
1.从TWinControls下继承,定义TLabel和TEdit组件为私有成员,发布TEdit的事件。但我觉的这样做太烦琐。
2.从TEdit继承,定义TLabel为私有成员,但该组件在画出自己时,不能显示TLabel子组件。
请问有什么好的办法?先谢了!
...全文
50 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
kk_liwei 2002-04-11
  • 打赏
  • 举报
回复
最后一次提前帖子,有其他好想法的兄弟,请赶快,今天下午结帐!
superaf 2002-04-10
  • 打赏
  • 举报
回复
还是用TEdit,里面用TLabel来做私有变量!
jq_song 2002-04-10
  • 打赏
  • 举报
回复
TFrame Ok!
kk_liwei 2002-04-10
  • 打赏
  • 举报
回复
同意楼上的!
还请大家多多发言!
shadou 2002-04-09
  • 打赏
  • 举报
回复
我在Delphi中,也有过类似的想法!
所以提出如下问题
继承的问题:
1,从何处开始(选择的依据和原则)
2,父类的属性如何选择性继承(不要的如何去除)
3,父类的属性如何改变初始值
4,父类的父类的属性如何选择性继承
5,自己如何定义想要的属性!!
Brand1 2002-04-09
  • 打赏
  • 举报
回复
我一直用第一种方法,其实在Delphi中,用第一种方法的比较多
wave_calmly 2002-04-08
  • 打赏
  • 举报
回复
利用TFrame是一个不错的办法
容易也可视
LikePig 2002-04-08
  • 打赏
  • 举报
回复
mark
kk_liwei 2002-04-08
  • 打赏
  • 举报
回复
不好意思,这两天没上网,所以...


请大家再帮忙!
eyeblue 2002-04-08
  • 打赏
  • 举报
回复
delphi6里本来就有TLabeledEdit,为什么不去看看borland的源码呢
borland是从TEdit派生,内部使用了TLabel的成员变量,想想为什么吧

答案很简单,就是从Tedit派生比从TLabel派生容易
eliubo 2002-04-08
  • 打赏
  • 举报
回复
To: supervar(小菜)
this也可以,如果用owner好像必须从TWinControl继承,TComponent不行。
supervar 2002-04-08
  • 打赏
  • 举报
回复
to eliubo(lb)

应该是
edit=new TEdit(Owner);
edit->Parent=Owner;
liulin 2002-04-08
  • 打赏
  • 举报
回复
label作为私有成员可以。且当然可以画出。但需要自己编写。
在SetSize中实现就可以。我实现过。没问题的
kk_liwei 2002-04-05
  • 打赏
  • 举报
回复
你需要的构造函数里给你的组件的高度和宽度赋值
在构造函数里加上
Width=200;
Height=26
eliubo 2002-04-05
  • 打赏
  • 举报
回复
我的组件调用时为何不能显示?
//////////////////////.h
class PACKAGE TMyCmpt1 : public TCustomControl
{
private:
TEdit* edit;
TListBox* list;
protected:
DYNAMIC void __fastcall DoExit(void);
public:
__fastcall TMyCmpt1(TComponent* Owner);
void __fastcall FEditOnEnter(TObject* Sender);
void __fastcall FListOnClick(TObject* Sender);
__published:
};
////////////////////////////////.cpp
static inline void ValidCtrCheck(TMyCmpt1 *)
{
new TMyCmpt1(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMyCmpt1::TMyCmpt1(TComponent* Owner)
: TCustomControl(Owner)
{
edit=new TEdit(this);
edit->Parent=this;
edit->Visible=true;
list=new TListBox(this);
list->Parent=this;
list->Visible=true;
edit->Left=10;
edit->Top=10;
edit->Width=50;
edit->Height=20;
list->Top=edit->Top+1;
list->Left=edit->Left;
list->Visible=false;
edit->OnEnter=FEditOnEnter;
list->OnClick=FListOnClick;
}
//---------------------------------------------------------------------------
namespace Mycmpt1
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TMyCmpt1)};
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TMyCmpt1::FEditOnEnter(TObject* Sender)
{
list->Visible=true;
}
void __fastcall TMyCmpt1::DoExit(void)
{
list->Visible=false;
}

void __fastcall TMyCmpt1::FListOnClick(TObject* Sender)
{
if (list->ItemIndex!=-1)
{edit->Text=list->Items->Strings[list->ItemIndex];
list->Visible=false;
}

}
调用:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "mycmpt1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMyCmpt1* my=new TMyCmpt1(this);
my->Parent=this;
my->Visible=true;
}
按钮单击完没有反应。调试所有代码都执行了,但就是部显示。
kingcaiyao 2002-04-05
  • 打赏
  • 举报
回复
没有问题。
kk_liwei 2002-04-05
  • 打赏
  • 举报
回复
我不是说不可以从TComponent类继承,如果你想的话,还可以从TObject继承的。
我的意思是如果需要可视组件从TControl以下的类继承合理一点。

如果方便的话,可不可以把你的例子给我看一下。
kk_liwei@163.com
kingcaiyao 2002-04-05
  • 打赏
  • 举报
回复
我现在不知道你具体的要求,但我做过从TComponent类继承过一个控件,它是一个组合控件,不过是一个编辑框和一下拉框,这肯定可以实现。从TComponent类继承,未必就一定是非可视化类,看你的构造函数.
kk_liwei 2002-04-05
  • 打赏
  • 举报
回复
楼上的说的方法我会,就是因为觉的烦琐(实际上要做不是上面举的简单例子,要繁的多),才发帖子的。
eliubo 2002-04-05
  • 打赏
  • 举报
回复
你可以从TWinControl类继承。
定义TEdit,和TLabel为私有成员,然后再构造函数中声明实例。
加载更多回复(6)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧