如何访问一个控件的 Protected 段的成员,改变 DBNavigator 的行为

问题:如何在使用 DBNavigator 的时候,用户点了 “+” 符号,对应的 DataSet 不是执行 Insert 而是执行 Append,达到新纪录始终出现在 DBGrid 的最底部的效果?


办法:通过修改 DBNavigator 的代码来实现。


但我们不能去修改 DBNavigator 的源代码。DBNavigator 有一个 Buttons 属性,但是属于 Portected 的,在其它地方无法访问到。对于 Delphi 的语法来说,可以这样处理:在需要访问 DBNavigator 的 Protected 区的成员的单元,声明一个新的类,继承 DBNavigator,因为 Delphi 的语法规定 Protected 区的成员在本单元可以访问,因此就可以访问被保护的 Buttons 属性了。


原理讲完,看代码:

var
  DBNavigator: TDBNavigator;
begin
  DBNavigator := ((Sender as TControl).Parent as TDBNavigator);
  if Assigned(DBNavigator.DataSource) and (DBNavigator.DataSource.State <> dsInactive) then
  begin
    if Assigned(DBNavigator.BeforeAction) then
      DBNavigator.BeforeAction(DBNavigator, nbInsert);

    DBNavigator.DataSource.DataSet.Append;

    if Assigned(DBNavigator.OnClick) then
      DBNavigator.OnClick(DBNavigator, nbInsert);
  end;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值