社区
C++ Builder
帖子详情
聚合组件继承问题
kk_liwei
2002-04-05 12:56:34
加精
举个简单例子:
将TLabel和TEdit(以TEdit为主)聚合为一个组件,发布TEdit的所有事件。我认为有两种方法。
1.从TWinControls下继承,定义TLabel和TEdit组件为私有成员,发布TEdit的事件。但我觉的这样做太烦琐。
2.从TEdit继承,定义TLabel为私有成员,但该组件在画出自己时,不能显示TLabel子组件。
请问有什么好的办法?先谢了!
...全文
50
26
打赏
收藏
聚合组件继承问题
举个简单例子: 将TLabel和TEdit(以TEdit为主)聚合为一个组件,发布TEdit的所有事件。我认为有两种方法。 1.从TWinControls下继承,定义TLabel和TEdit组件为私有成员,发布TEdit的事件。但我觉的这样做太烦琐。 2.从TEdit继承,定义TLabel为私有成员,但该组件在画出自己时,不能显示TLabel子组件。 请问有什么好的办法?先谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
如何正确使用Maven?
Maven是一个非常优秀的项目管理和构建工具,做为一名Java开发人员,我们需要熟练掌握Maven的基础知识,并且能够了解其深层次的一些概念和操作。在本次的Maven入门课程中,我们从简单的Maven是什么入手,由浅入深的讲解Maven的安装配置,Maven的仓库,Maven的坐标与依赖,Maven的生命周期以及插件机制,
聚合
与
继承
特性,并且学会搭建使用私服,可以编写自定义的插件。
继承
、组合、
聚合
的区别
继承
、组合和
聚合
是面向对象编程中,用于实现类与类之间关系的三种常用机制。
继承
(inheritance)是指一个类从另一个类中
继承
(inherit)其属性和方法,被
继承
的类被称作父类、基类或超类,
继承
的类被称作子类、派生类或衍生类。子类可以
继承
父类的所有属性和方法,也可以重写或添加自己的属性和方法,还可以继续被其他类
继承
。
继承
实现了“is-a”(是一个)的关系,即一个类是另一个类的特殊类型。
使用组合/
聚合
的方式来代替
继承
在设计模式原则中有“组合/
聚合
复用原则”,结合网上的相关资料和文章,得出自己个人的理解并在此记录下。 首先,我们要明确为什么要使用组合/
聚合
的方式来代替
继承
? 1、降低耦合度,子类通过
继承
父类,可以达到代码重用的目的。但同时也意味着子类必须全盘
继承
父类的属性和方法,不需要的属性和方法
继承
会造成污染,当父类的方法变更时也会影响到子类。因此,出于降低代码耦合的角度考虑,应该避免直接
继承
有具体方法实现的父类。 2、提高灵活性,由于java单
继承
的特点,无法同时使用多个类的特征,通过在类中创建不同工具类的方式,可以
【微服务】maven
聚合
及
继承
关系在spring cloud项目中的原理及应用
1. 前言 1.1 maven官网 1.2 本文需要解释清楚的知识点 maven的
聚合
和
继承
是两个不同的特性(官网的说法),看懂spring cloud项目需要同时掌握
聚合
和
继承
的概念与设计模式中的基本概念一脉相承,以下用java类比 弄清楚 <dependencyManagement>中的 <dependencies> 和 普通 <dependencies> 的区别 1.3 需要的前置知识 了解maven 的独立安装及配置 了解maven 生命周期 了解mave
2022.1.17 服务与
组件
pom
继承
与
聚合
(parent modules标签)
今天突然对服务和依赖的基础
组件
产生疑惑,比如rpc服务调用,为什么还需要 服务与
组件
参考:微服务时代
组件
化和服务化的抉择 (https://www.cnblogs.com/vivotech/p/14592370.html) 看了这个大概了解
组件
和服务的区别,但还是不太明白,为什么都是要调用第三方的东西,有的是依赖share包,有的是依赖client,也许是我不明白为什么rpc调用那个share包属不属于
组件
。 未完待续… pom
继承
与
聚合
聚合
主要是为了方便快速构建项目,
继承
主要是为了消除重复配置
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章