2008-12-03 30 views
4

我想寫一個TCustomDBGrid後代,它的設計感覺像一個TListBox。我想改變的一件事是Options屬性的默認值。 TCustomDBGrid選項定義爲:重寫Delphi屬性默認值的最簡單方法是什麼?

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]; 

不工作;編譯器預計讀取寫入後類型,而不是默認。問題是,FOptions和SetOptions在TCustomDBGrid中都被定義爲私有的,而不是受保護的。

我是否必須編寫自己的get和set方法來調用「繼承的選項」,或者是否有更簡單的方法來執行此操作?

+0

我也很好奇。我在Borland的C++ Builder中工作得很好。 __property DefaultRowHeight = {default = 18}; – Jeremiah 2008-12-03 20:52:57

回答

10

請勿指定類型。然後你可以改變默認值。請記住,您還必須在構造函數中將Options屬性設置爲此默認值。下面的代碼實際上並沒有設置默認值,它只是讓它知道不會流屬性值時,值是這樣的。

property Options default [dgTitles, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgCancelOnExit]; 
+0

謝謝!我知道必須有一些簡單的方法來做到這一點...... – 2008-12-03 21:02:05

2

這不會在運行時創建的DBGrid工作... 看到這個(德爾福語言指南2006年BDS):


屬性值不會自動初始化爲默認值。也就是說,僅當屬性值被保存到表單文件時,缺省指令控制,而不是新創建的實例上的屬性的初始值。


對於設計時窗體上的組件,我認爲沒有任何問題。但是,在運行時創建的控件,我認爲這是更好的(我的意思是,更安全)做構造器的控制裝置:

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

弄好,做默認指令還:

property Options default [dgTitles, dgTabs, dgRowSelect, dgAlwaysShowSelection, 
          dgCancelOnExit]; 
+0

其實你需要做的都是正確的。但是這部分不需要被遺忘,或者根本不起作用。我在我的回答中確實指出了這一點,但沒有像你這樣的代碼。 – 2008-12-03 21:51:28

相關問題