2011-10-04 42 views
4

我的问题是:德尔福:DBGrid选项不会保存?

我有我自己的DBGrid,基于TDBGrid。

因为在许多地方更好看选择,我想我把它放在创建,属性编辑器保存选项财产,如果我将它设置为假后。 所以构造函数创建为:

constructor TMyDBGrid.Create(aOwner: TComponent); 
begin 
    inherited Create(aOwner); 
    Options := Options + [dgAlwaysShowSelection]; 
end; 

好吧,我认为是好的,因为我将它设置为True,则创建是使其真正在第一,但在加载德尔福将它改成了良好的值(假)。

但表明该做的,现在没有工作经验!

我不知道为什么。

我把我自己的DBGrid在Form1上。 ASS选项已打开。 我将它设置为false。

我启动应用程序。 现在这是再次。 当我展示选项上装载的价值,我得到了真正的价值。 因此,该值不会根据需要加载。

我不知道为什么会发生,但我认为这是基于“默认”? 可能默认为False,所以如果我将它设置为False,那么它不会将值保存到DFM中...

那么,如何在不使用此效果的情况下保存值?

感谢您的帮助: DD

回答

5

德尔福流系统,只有当他们从他们的默认值不同的存储性能。这些默认值可以是隐式的(例如整数为0,字符串为''),它们可以通过默认关键字明确设置。 TDbGrid.Options也是如此([dgEditing,dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit,dgTitleClick,dgTitleHotTrack])。

只要您不更改集合中的任何其他选项,通过将dgAlwaysShowSelection设置为false,您将以缺省值结束并且不存储在DFM中。现在,如果您在Create中将dgAlwaysShowSelection设置为true,并且DFM中不存储任何内容,则该选项在加载后将开启,即使存储时该选项已关闭。

要完成您的需求,您不仅必须在构造函数中将该选项设置为true,还要指定已更改的默认值值,以使流式系统知道此更改。