4

我正在尝试编写一个 TCustomDBGrid 后代,它的设计感觉就像一个 TListBox。我要更改的一件事是 Options 属性的默认值。TCustomDBGrid 将选项定义为:

property Options: TDBGridOptions read FOptions write SetOptions
  default [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines,
  dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit];

试图在我的课堂上覆盖它

  property Options: TDBGridOptions default
     [dgTitles, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgCancelOnExit];

不工作;编译器期望在类型之后读取写入,而不是default。问题是,FOptions 和 SetOptions 在 TCustomDBGrid 中都被定义为私有的,不受保护的。

我是否必须编写自己的 get 和 set 方法来调用“ inherited Options”,还是有更简单的方法来做到这一点?

4

2 回答 2

10

不要指定类型。然后您可以更改默认值。请记住,您还必须在构造函数中将 Options 属性设置为此默认值。下面的代码实际上并没有设置默认值,它只是让它知道当值是这样时不要流式传输属性值。

property Options default [dgTitles, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgCancelOnExit];
于 2008-12-03T20:53:33.827 回答
2

这在运行时创建的 dbgrid 中不起作用...请参阅此(来自 BDS 2006 上的 Delphi 语言指南):


属性值不会自动初始化为默认值。也就是说,默认指令仅控制何时将属性值保存到表单文件,而不控制新创建的实例上的属性初始值。


对于设计时表单上的组件,我认为没有问题。但是在运行时创建的控件中,我认为对构造函数进行覆盖会更好(我的意思是更安全):

constructor Create(Aowner:TComponent);
begin  
  inherited;
  Options := [dgTitles, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgCancelOnExit];
end;

为了使事情正确,请执行默认指令:

property Options default  [dgTitles, dgTabs, dgRowSelect, dgAlwaysShowSelection, 
                           dgCancelOnExit];
于 2008-12-03T21:44:57.860 回答