4

我的问题是下一个:

我有自己的基于 TDBGrid 的 DBGrid。

因为在很多地方更好看Selection,我以为我在Create上设置了,如果我稍后设置为False,属性编辑器会保存Options属性。所以构造函数将其创建为:

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

好的,我认为没关系,因为我将其设置为 True,创建开始时将其设为 True,但在 Loaded 时,Delphi 会将其更改为好的值(False)。

但经验表明,现在这行不通!

我不知道为什么。

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

我启动应用程序。现在又开始了。当我在 LOADed 上显示 Option 的值时,我得到了 True 值。因此,不会根据需要加载该值。

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

那么在没有这种影响的情况下保存值的可能方法是什么?

感谢您的帮助:dd

4

1 回答 1

5

Delphi 流系统仅在属性与默认值不同时才存储它们。这些默认值可以是隐式的(如整数的 0 和字符串的 ''),并且可以通过default关键字显式设置。TDbGrid.Options 也是这种情况([dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack])。

只要您不更改集合中的任何其他选项,通过将 dgAlwaysShowSelection 设置为 false,您最终会得到默认值,并且不会存储在 DFM 中。现在,当您在 Create 中将 dgAlwaysShowSelection 设置为 true 并且 DFM 中没有存储任何内容时,该选项将在加载后打开,即使它在存储时已关闭。

为了满足您的需求,您不仅需要在构造函数中将选项设置为 true,还需要指定更改后的默认值,以使流系统知道此更改。

于 2011-10-04T11:00:15.427 回答