请问有关bcb的inherited的使用(50分)

  • 主题发起人 主题发起人 tuiger
  • 开始时间 开始时间
T

tuiger

Unregistered / Unconfirmed
GUEST, unregistred user!
请问大家一个问题,delphi中使用原有过程时用的是inherited.
我在使用bcb中也想找到这个inherited函数,可是没有。不知在bcb中有没有可以代替的语法呢?
谢谢!
 
BCB有相关的语法,而且功能更强大:
inherited proc...
改为:
父类(或祖先类)名称::proc...
 
比如我对一组数据要进行检查,在添加新记录时,我要将其中字段dw设为"***",我想对数据导航
DBNavigator1的add键进行重载,加入我的命令后,我还想用它其它的命令。如:
void __fastcall TForm1::DBNavigator1Click(TObject *Sender, TNavigateBtn Button)
{
AnsiString BtnName;
switch (Button)
{
case nbFirst: break;
case nbPrior: break;
case nbNext: break;
case nbLast: break;
case nbInsert:
DBNavigator1->DataSource->DataSet->Append();
DBNavigator1->DataSource->DataSet->FieldByName("dw")= "***" ;

break;
。。。。。。
}
此处加上DBNavigator过去的click过程,该如何加?
}
是DBNavigator::click() ?
 
调用click函数等同于鼠标左击,发生事件,然后控件响应该事件,反过来鼠标左击不会调用click函数;
调用基类的同名函数,不论该函数是否为虚,均可用“类名::”定位,例如:
objB->ClassA::funA(..);
楼上的问题显然不是继承的问题,解决的办法是:
1.在Tform构造函数或FormCreate事件处理函数中保存原来的DBNaigator1.OnClick:
oldClick=DBNavigator1.OnClick;
然后OnClick指向新事件处理函数:
DBNavigator1.OnClick=DBNavigator1Click;
2.在
void __fastcall TForm1::DBNavigator1Click(TObject *Sender, TNavigateBtn Button)
{
AnsiString BtnName;
switch (Button)
{
case nbFirst: break;
case nbPrior: break;
case nbNext: break;
case nbLast: break;
case nbInsert:
DBNavigator1->DataSource->DataSet->Append();
DBNavigator1->DataSource->DataSet->FieldByName("dw")= "***" ;

break;
。。。。。。
}
//此处应该是
if (oldClick!=NULL) oldClick(....);
//此处加上DBNavigator过去的click过程,该如何加?
}
3.在设计时刻使OnClick不要指向DBNavigator1Click;
另外的办法:
实际上OldClick一般是NULL;
因此,函数不用改动,只要不加Click函数即可,否则一点击将触发无限点击事件。
 
我已经找到了正确方法。是 inherited::函数名(), 参见 c++builder程序设计大全第185页例。你说的方法我也会试一下,谢谢
 
inherited其实就是继承
你在调用函数时指明类对象即可
 
后退
顶部