執行子類別的button1click而非父類別的button1click |
尚未結案
|
aAlan
一般會員 發表:38 回覆:24 積分:12 註冊:2004-07-23 發送簡訊給我 |
如上圖:
背景狀況說明如下:
1.uSensor為父類別、uIPSensor為uSensor的子類別。
2.我在uIPSensor已經uses uSensor (是在Interface與Type之間的uses,而非在implementation下)
3.uSensor不可以uses uIPSensor
4.uSensor有一Form名為frmSensor,frmSensor當中有一button元件,名為button1,也有一memo元件名為memo1 現在我想做的是:當我按下button1時,Delphi 7 會執行子類別所宣告個button1Click事件,而不是執行父類別的button1click事件。這要如何完成呢?
還望各位大大教我!
|
alphakao
一般會員 發表:0 回覆:18 積分:8 註冊:2002-07-04 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好:
關鍵在 TForm2 有沒有使用關鍵字 inherited 將事件往 TForm1 傳遞。
如果你將 TForm2 中的 inherited 註解掉,結果只會秀出 "我是第二個表單" 如果你將 TForm2 中的 inherited 放置在第一行,結果會先秀出 "我是第一個表單" 再秀出 "我是第二個表單"。 如果將 TForm2 中的 inherited 放置在第二行,你應該就知道答案了吧。
TForm1 = class(TForm) procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage ('我是第一個表單'); end; TForm2 = class(TForm1) procedure TForm2.Button1Click(Sender: TObject); begin inherited; ShowMessage ('我是第二個表單'); end; |
aAlan
一般會員 發表:38 回覆:24 積分:12 註冊:2004-07-23 發送簡訊給我 |
謝謝各位辛苦的回答:
在uSensor中有1.我自訂的類別TA,繼承於TObject。
2.form1繼承於TForm,也就是form1=Class(TForm)
至於在uIPSensor中有1.我自訂的類別TB,繼承於uSensor內的「我自訂類別」
2.沒有form類別。
其它情況如之前「背景狀況」所述
現在我在form1放置了一個button,然後在button1Click內不寫任何程式碼,並且在程式最前面的
宣告處procedure button1click(sender:TObject);加上Virtual; 然後再到uIPSensor中在程式最前面的宣告處字行寫一個
procedure button1click(sender:TObject);加上override; 然後在
procedure TB.button1click(sender:TObject);
begin
ShowMessage('程式目前正執行子類別的button1click');
end; 可是程式一compiler在父類別的button1Click就自動消失了。 因為這樣,程式就出現父類別沒有宣告的錯誤訊息,造成我無法執行子類別的TB.button1click
這要如何解決呢?
不知道我這樣解釋,大家是否能夠瞭解呢?多謝了
引言: 你好: 關鍵在 TForm2 有沒有使用關鍵字 inherited 將事件往 TForm1 傳遞。 如果你將 TForm2 中的 inherited 註解掉,結果只會秀出 "我是第二個表單" 如果你將 TForm2 中的 inherited 放置在第一行,結果會先秀出 "我是第一個表單" 再秀出 "我是第二個表單"。 如果將 TForm2 中的 inherited 放置在第二行,你應該就知道答案了吧。TForm1 = class(TForm) procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage ('我是第一個表單'); end; TForm2 = class(TForm1) procedure TForm2.Button1Click(Sender: TObject); begin inherited; ShowMessage ('我是第二個表單'); end; |
alphakao
一般會員 發表:0 回覆:18 積分:8 註冊:2002-07-04 發送簡訊給我 |
引言: 謝謝各位辛苦的回答: 在uSensor中有1.我自訂的類別TA,繼承於TObject。 2.form1繼承於TForm,也就是form1=Class(TForm) 至於在uIPSensor中有1.我自訂的類別TB,繼承於uSensor內的「我自訂類別」 2.沒有form類別。 其它情況如之前「背景狀況」所述 現在我在form1放置了一個button,然後在button1Click內不寫任何程式碼,並且在程式最前面的 宣告處procedure button1click(sender:TObject);加上Virtual; 然後再到uIPSensor中在程式最前面的宣告處字行寫一個 procedure button1click(sender:TObject);加上override; 然後在 procedure TB.button1click(sender:TObject); begin ShowMessage('程式目前正執行子類別的button1click'); end; 可是程式一compiler在父類別的button1Click就自動消失了。 因為這樣,程式就出現父類別沒有宣告的錯誤訊息,造成我無法執行子類別的TB.button1click 這要如何解決呢? 不知道我這樣解釋,大家是否能夠瞭解呢?多謝了 引言: 謝謝各位辛苦的回答: 在uSensor中有1.我自訂的類別TA,繼承於TObject。 2.form1繼承於TForm,也就是form1=Class(TForm) 至於在uIPSensor中有1.我自訂的類別TB,繼承於uSensor內的「我自訂類別」 2.沒有form類別。 其它情況如之前「背景狀況」所述 現在我在form1放置了一個button,然後在button1Click內不寫任何程式碼,並且在程式最前面的 宣告處procedure button1click(sender:TObject);加上Virtual; 然後再到uIPSensor中在程式最前面的宣告處字行寫一個 procedure button1click(sender:TObject);加上override; 然後在 procedure TB.button1click(sender:TObject); begin ShowMessage('程式目前正執行子類別的button1click'); end; 可是程式一compiler在父類別的button1Click就自動消失了。 因為這樣,程式就出現父類別沒有宣告的錯誤訊息,造成我無法執行子類別的TB.button1click 這要如何解決呢? 不知道我這樣解釋,大家是否能夠瞭解呢?多謝了 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TA = Class(TObject) procedure button1onclick(Sender:TObject);virtual; end; TB = Class(TA) procedure button1onclick(Sender:TObject);override; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var MyTEST:TA; begin MyTEST:=TB.Create; MyTEST.button1onclick(Sender); MyTEST.Destroy; end; { TA } procedure TA.button1onclick(Sender: TObject); begin ShowMessage('程式目前正執行父類別的button1click'); end; { TB } procedure TB.button1onclick(Sender: TObject); begin ShowMessage('程式目前正執行子類別的button1click'); end; end.作不出你的效果,所以你自己看看有什麼不一樣. |
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
aAlan 你好
比對一下,你的Button1click事件是寫在那個位置? { frmSensor } unit frmSensor; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click (Sender: TObject); private { Private declarations } public { Public declarations } end; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin // 在這邊設定的程式碼,會被TA或TB的Button1Click取代 end; End. { uSensor } unit uSensor ; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, frmSensor; type TA = class(TObject) Private { Private declarations } Form1 : TForm1; Procedure Button1Click (Sender: TObject); public constructor Create; override; destructor Destroy; override; { Public declarations } end; implementation {$R *.DFM} constructor TA.Create; Begin inherited; Form1 := TForm1.Create(Application); Form1.Button1.onClick := Button1Click ; // 在TA建立後才掛上Click事件 // 同時取代掉frmSensor中的Button1Click的事件 End; destructor TA.Destroy; Begin Form1.Free; inherited; End; Procedure TA. Button1Click(Sender: TObject); Begin ShowMessage('程式目前正執行uSensor類別的button1click'); End; end. { uIPSensor } unit uIPSensor ; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, frmSensor, uSensor ; type TB = class(TA) Private { Private declarations } Procedure Button1Click(Sender: TObject); Override; public { Public declarations } end; implementation {$R *.DFM} Procedure TB.Button1Click(Sender: TObject); Begin ShowMessage('程式目前正執行uIPSensor類別的button1click'); End; end._______________________________________ 深藍的魚,祝您好運..........連連 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |