在cbc中如何重载窗体事件?
在cbc中如何重载窗体事件?
1.在delphi中只要用
inherited Create(self);即可
在cbc中怎么做?
2.另我新建一个窗体,系统默认好象生成的不是FormCreate
而是窗口类的构造函数,它与窗体FormCreate有什么区别?
问题点数:100、回复次数:20Top
1 楼szbug(深圳虫)回复于 2002-11-12 14:53:58 得分 0
一个是类的构造函数,一个是窗体事件,不一样的。。。Top
2 楼wjm2000()回复于 2002-11-12 14:56:00 得分 0
楼上的,有回答第一个问题吗?
因为在delphi中经常会重载Create事件,
可是在CBC中一般是怎么做啊?Top
3 楼david_ch(阿阌)回复于 2002-11-12 14:59:22 得分 0
关注中……Top
4 楼wjm2000()回复于 2002-11-12 15:03:05 得分 0
就好比我原来在delphi要重载一个Frame的create事件,
在create重载后的事件里加一句
inherited Create(application)即可,
但在cbc里应该怎么做?
Top
5 楼jishiping(JSP 季世平)回复于 2002-11-12 15:10:15 得分 0
我对Delphi不是很熟。我个人认为,Delphi里的成员函数Create,相当于BCB
里的构造函数。Top
6 楼wjm2000()回复于 2002-11-12 15:16:48 得分 0
楼上的大佬:
我重载析构事件,系统报"stack overflow",机器随后当机,真可怕。
其实我就做如下改动:
TForm2::TForm2(TComponent * Owen);
----->
TForm2::TForm2(TComponent * Owen,int i);
Top
7 楼szbug(深圳虫)回复于 2002-11-12 15:18:00 得分 0
to 楼主:
不好意思,Delphi不是很熟悉。。所以不是很清楚,但是构造函数和事件在类里面来讲都是一样的:成员函数,只是构造函数是特殊的成员函数(有一定的规定,析构函数也如此)。Top
8 楼wjm2000()回复于 2002-11-12 15:21:51 得分 0
还有就是假如我重载了相应事件,
在delphi可调用inherited来调用原类相应事件,
在CBC里要怎么做?Top
9 楼szbug(深圳虫)回复于 2002-11-12 15:23:27 得分 0
不可能吧。。。
我这样,是可以的:
头文件:
public: // User declarations
__fastcall TForm1(TComponent* Owner);
__fastcall TForm1(TComponent* Owner, int i);
Top
10 楼angowb()回复于 2002-11-12 15:24:36 得分 0
gzTop
11 楼wjm2000()回复于 2002-11-12 15:29:57 得分 0
你这样啊?
哦,我是直接改那个TForm1,你这样我倒没试过!
即使这样,那我要先执行父类的相应方法要怎么弄啊?Top
12 楼jishiping(JSP 季世平)回复于 2002-11-12 15:30:12 得分 0
更改了构造函数,BCB有时会有问题。如果有问题,一般执行Build就可以了。Top
13 楼wjm2000()回复于 2002-11-12 15:32:54 得分 0
你这样也不行!
还是提示"Stack overflow";
我按你的改了,编译不会出错,
便运行出错
Form2 = new TForm2(Application,100);//error:stack overflow
Form2->ShowModal();
delete Form2;
Top
14 楼slwqw(四大名捕之追杀令)回复于 2002-11-12 15:36:41 得分 0
1、inherited Create(self);
这是调用父类的构造函数,BCB已经帮你做了,如下:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner) //这里就是
2、在delphi可调用inherited来调用原类相应事件,
在CBC里要怎么做?
使用::,如下:
TForm1::WndPorc(...)
{
TForm::WndProc(...);
//Your Code
}
Top
15 楼wjm2000()回复于 2002-11-12 15:42:55 得分 0
sorry,是我搞错了,不能用application,
改成this搞定Top
16 楼wjm2000()回复于 2002-11-12 15:47:39 得分 0
To BCB_FANS(四大名捕之追杀令) :
1.
__fastcall TForm2::TForm2(TComponent *Owner,int i,int j)
: TForm(Owner)
{
TForm2::TForm2(Owner);//这句在这里是不是多此一举?
fi=i;
}
2.你给的第二个解答意思是不是假如我有个TForm2是从TForm1继承过来的,
那么要在TForm2里执行TForm1是不是如
TForm1::Fun()即可,
另我原来看C++的书,好象有个关键字叫super可代表父类,可在cbc里怎么没有?Top
17 楼slwqw(四大名捕之追杀令)回复于 2002-11-12 15:56:32 得分 100
1、的确是多此一举。
2、YES!!!
super是Java里边的关键字,BCB没有,只能使用:: .Top
18 楼wjm2000()回复于 2002-11-12 16:17:52 得分 0
还有一问:
在delphi里有用is 判断当前类是什么类,cbc中怎么做?怎么强制转换
好比
if(Sender is TEdit)then
t:=Sender as TEdit;
Top
19 楼wjm2000()回复于 2002-11-12 16:20:25 得分 0
如下写专业吗?
if(Own->Components[i]->ClassName() =="TEdit")
t=TEdit(Own->Components[i]);Top
20 楼wjm2000()回复于 2002-11-12 16:24:25 得分 0
if(AnsiString(Sender->ClassName()) ==AnsiString("TButton"))
{
TButton *b=(TButton *)(Sender);
ShowMessage(b->ClassName() );
}Top




