線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:905
推到 Plurk!
推到 Facebook!

繼承問題(子有,但父無的control)

答題得分者是:change.jian
GDMichael
一般會員


發表:27
回覆:36
積分:12
註冊:2004-10-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-15 14:40:42 IP:203.185.xxx.xxx 未訂閱
unit CustDataUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, FrmCustData; type TFCustDataForm= class(TForm) BtnNew: TButton; private { Private declarations } protected Procedure RefreshFrmRight(); public { Public declarations } end; var CustDataForm: TFCustDataForm; implementation {$R *.dfm} Procedure TFCustDataForm.RefreshFrmRight(); Begin TBitBtn(FindComponent('BtnNew')).Visible := False; End; end. unit ChildUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, FrmCustData; type TChildForm = class(TFCustDataForm) BtnNew: TButton; private { Private declarations } public { Public declarations } end; var ChildForm: TChildForm; implementation {$R *.dfm} end. 以上的code是節錄的... 父的class有一個refreshright method,由於子類別的button都會有相同名稱,所以我想將refeshright(即refresh的control)放在父的class上,但好像不work,因為子類別用inherited時,只會執行父類別的那個refreshright,如果父類別沒有那個button就會error,有的話也只會作用在父的類別,請問怎麼解決呢?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-15 14:53:42 IP:61.222.xxx.xxx 未訂閱
TChildForm = class(TFCustDataForm) BtnNew: TButton; private .... TChildForm已經繼承 TFCustDataForm 就不需要在 ChildForm 建立相同作用的按鈕。
GDMichael
一般會員


發表:27
回覆:36
積分:12
註冊:2004-10-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-15 15:07:51 IP:203.185.xxx.xxx 未訂閱
如果parentform沒有這個button,但childform有,我還能在parentform到coding嗎?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-15 15:14:24 IP:61.222.xxx.xxx 未訂閱
可以!但須判斷這個物件是否存在,避免引起錯誤! if assigned(FindComponent('BtnNew')) then ....
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-15 15:14:56 IP:61.218.xxx.xxx 未訂閱
hi,GDMichael: 不太瞭解你的意思.如果TChildForm的BtnNew的動作與TFCustDataForm一樣的話,那麼你的TChildForm.BtnNew並不需要再去寫code.另外,TFCustDataForm己經有的物件(如這裡的BtnNew),那麼繼承的Form也一定會有這個物件,不能刪除,也不能再新增一個同名的物件. 另外,如果還有問題的話,把Procedure TFCustDataForm.RefreshFrmRight()的code放上來會比較快幫你找到解答
GDMichael
一般會員


發表:27
回覆:36
積分:12
註冊:2004-10-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-15 15:32:23 IP:203.185.xxx.xxx 未訂閱
我的意思是指TDataForm裏面只是一個空form,什麼也沒有,這個form只當作為母form給其它form inherit,而真正存在的control,如tbutton,tedit等都只會在child form design time時才會出現的,但由於每張child form都有著相同的button,所以我想將部份控制這些child form的control的code放在tdataform,例子是:refreshright 由於childform會有new,edit,delete等button,所以我想在父的form時寫refreshright的code,好讓我不用在每個子form到寫上... 我有一個好奇的問題,如果父form有一個button,如"abcbutton",但在子form中郤只是一張空form,那麼子form是否還是繼承了呢?但真正我是看不到這個button在子form存在... 請讓我說多一點,我曾經試過在parent form中: Self.Caption 然後在子form中inherited,結果回傳的是子form的名稱?請問為何呢?可否解釋一下何時inherited時會用了父的method,何時只會使用到子form的method呢? 問題太多,而且又有點離了題,但也請回覆一下,多謝幫忙
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-15 15:57:47 IP:61.222.xxx.xxx 未訂閱
>我有一個好奇的問題,如果父form有一個button,如"abcbutton",但在子form中郤只是一張空form,那麼子form是否還是繼承了呢?但真正我是看不到這個button在子form存在... 老爸的Form 有一Button 那麼繼承的兒子,也會顯示這個 Button 您如果兒子沒有顯示出來爸爸的Button 請儲存或者重新開啟專案檔。 發表人 - wameng 於 2004/10/15 16:09:30
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-15 16:39:13 IP:61.218.xxx.xxx 未訂閱
1.父form有的元件,子form一定有.沒有,那可能你操作有問題....,繼承的form產生,不能"只改source code"而己,要從IDE->NEW....裡去操作    
引言: 我有一個好奇的問題,如果父form有一個button,如"abcbutton",但在子form中郤只是一張空form,那麼子form是否還是繼承了呢?但真正我是看不到這個button在子form存在...
2.這是正常的,所有的code,只對該段code所屬的物件作用,不會去作用到其他的物件上.parent form中的程式,self.caption,如果執行時是從child進去的,那麼這個self就是child form;反之,如果是parent form觸發的,那self就是parent form.
引言: 請讓我說多一點,我曾經試過在parent form中: Self.Caption 然後在子form中inherited,結果回傳的是子form的名稱?請問為何呢?可否解釋一下何時inherited時會用了父的method,何時只會使用到子form的method呢? 問題太多,而且又有點離了題,但也請回覆一下,多謝幫忙
GDMichael
一般會員


發表:27
回覆:36
積分:12
註冊:2004-10-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-15 16:50:22 IP:203.185.xxx.xxx 未訂閱
引言:1.父form有的元件,子form一定有.沒有,那可能你操作有問題....,繼承的form產生,不能"只改source code"而己,要從IDE->NEW....裡去操作
之前真的只是改改source code而已...郤不知道要這樣作的....但我想問一下,inherit後的control還是可以自由修改位置,大少和屬性嗎?
引言:2.這是正常的,所有的code,只對該段code所屬的物件作用,不會去作用到其他的物件上.parent form中的程式,self.caption,如果執行時是從child進去的,那麼這個self就是child form;反之,如果是parent form觸發的,那self就是parent form.
雖然對"所屬物件",有點混亂,但大慨也能夠明白....
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-10-15 17:03:30 IP:61.218.xxx.xxx 未訂閱
1.可以的,只要不刪掉,其他的都可以.所以,如果child form用不到,可以將其visible設為False.    2.再舉個例子,TStringList是繼承TStrings而來的.如果TStringList裡的code有inherited到Tstrings上面,那麼你認這段code會作用在TStrings上面還是TStringList上面?當然還是在TStringList上面,不然inherted就沒有意義了    
引言:
引言:1.父form有的元件,子form一定有.沒有,那可能你操作有問題....,繼承的form產生,不能"只改source code"而己,要從IDE->NEW....裡去操作
之前真的只是改改source code而已...郤不知道要這樣作的....但我想問一下,inherit後的control還是可以自由修改位置,大少和屬性嗎?
引言:2.這是正常的,所有的code,只對該段code所屬的物件作用,不會去作用到其他的物件上.parent form中的程式,self.caption,如果執行時是從child進去的,那麼這個self就是child form;反之,如果是parent form觸發的,那self就是parent form.
雖然對"所屬物件",有點混亂,但大慨也能夠明白....
GDMichael
一般會員


發表:27
回覆:36
積分:12
註冊:2004-10-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-10-15 17:12:23 IP:203.185.xxx.xxx 未訂閱
經您一講,好像茅塞頓開,多謝指教^^
系統時間:2024-05-17 13:31:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!