我正在尝试编写一个TCustomDBGrid后代,它的设计感觉就像TListBox一样。我想要改变的一件事是Options属性的默认值。 TCustomDBGrid将Options定义为:
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];
不起作用;编译器在类型后期望读取或写入,而不是默认。问题是,在TCustomDBGrid中,FOptions和SetOptions都被定义为私有,而不是受保护。
我是否必须编写自己的get和set方法来调用“继承的选项”,或者是否有更简单的方法来执行此操作?
答案 0 :(得分:10)
不指定类型。然后您可以更改默认值。请记住,您还必须在构造函数中将Options属性设置为此默认值。下面的代码实际上并没有设置默认值,它只是让它知道当值是这样时不流传输属性值。
property Options default [dgTitles, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgCancelOnExit];
答案 1 :(得分: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];