2009-08-14 63 views
0

我有兩種形式,一種是主要的和其他的遺傳形式main.Lets說我有在主窗體上的函數:如何繼承在運行時創建的控件?

procedure FormMain.CreateButton; 
begin 
    with TsButton.Create(Self) do begin 
    Width := 31; 
    Height := 31; 
    Left := 31; 
    Top := 31; 
    Visible := true; 
    Parent := Self; 
    end; 
end; 

通常在主窗體上一切都應該繼承的形式,但這種是我所做的:

我從mainForm調用CreateButton,但該按鈕只在主窗體上。

是否有可能繼承該按鈕?

回答

4

設計時和運行時間之間存在差異。表單設計器爲您的表單創建一個定義,它在運行時實例化。如果您從另一個表單繼承一個表單,那麼它將採用基本模板並添加到其中。但是表單設計器表單只是模板,就像類定義一樣。

現在,在運行時,實例化一個基本形式和衍生形式,它從存儲在您的應用程序的資源部分模板創建它們。如果你添加了一些基本形式的情況下,你正在修改的單個實例,而不是定義,所以當然它不會出現在另一個實例。如果要動態地添加一個按鈕形式,你必須在該實例(在這種情況下,派生形式)單獨創建它。

2

如果你的意思是「繼承」的方式通常意味着,那麼答案是否定的。 (通常情況下,我的意思是你在IDE中創建了主表單,然後在IDE中創建了主表單的後代。)

在這種情況下,在運行時創建的控件不是繼承樹的一部分,後裔對此一無所知。你必須手動添加相同的代碼給後代。

你究竟想完成什麼?如果你事先知道在底層和後代表單上都需要這個按鈕(你顯然是這樣做的,因爲你正在編寫代碼來創建按鈕),爲什麼不把實際的按鈕放在祖先上呢?

+0

呀 - 把它放在那裏,但可使它不可見。只需在需要時將其視爲可見。 – 2009-08-14 15:05:42

1

如果這是繼承,你將無法在兩種形式上做任何不同的事情。因此,您不希望它繼承您的運行時更改!