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

来源:互联网 发布:递归算法反汇编 编辑:程序博客网 时间:2024/06/17 22:37

问题:如何在使用 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;


0 0
原创粉丝点击