自定義事件實現不同窗體間的通訊Delphi篇

2021-04-12 12:38:58 字數 1881 閱讀 1240

要實現子窗體與父窗體之間的通訊,有多種方法(比如:過載子窗體的建構函式,將父窗體的引用作為引數傳遞給子窗體)。下面我要介紹的是利用自定義事件的方法,它能夠最大程度的避免模組之間的耦合,充分體現物件導向的優點。

先將效果圖展示給大家:

[[the no.1 picture.]]

下面是實現**:

unit2 //子窗體

type

//宣告自定義事件的型別(類似於c#中的委託)

tmyeventhandle = procedure (sender: tobject; content: string) of object;

tform2 = class(tform)

combobox1: tcombobox;

label1: tlabel;

procedure combobox1click(sender: tobject);

private

fonselectionchanged: tmyeventhandle;

public

//宣告自定義事件

property onselectionchanged: tmyeventhandle

read fonselectionchanged write fonselectionchanged;

end;

procedure tform2.combobox1click(sender: tobject);

begin

//當選擇改變時,觸發自定義的事件

if assigned(fonselectionchanged) then

fonselectionchanged(self, combobox1.text);

end;

unit1 //父窗體

type

tform1 = class(tform)

btnopenform2: tbutton;

edit1: tedit;

label1: tlabel;

procedure btnopenform2click(sender: tobject);

private

m_frm2: tform2;

procedure frm2_selectionchanged(sender: tobject; content: string);

public

constructor create(aowner: tcomponent); override;

destructor destroy; override;

end;

constructor tform1.create(aowner: tcomponent);

begin

inherited create(aowner);

m_frm2 := tform2.create(self);

//指定當m_frm2的自定義事件發生時的處理程式

m_frm2.onselectionchanged := frm2_selectionchanged;

end;

destructor tform1.destroy;

begin

m_frm2.free;

inherited destroy;

end;

procedure tform1.frm2_selectionchanged(sender: tobject; content: string);

begin

edit1.text := content;

end;

procedure tform1.btnopenform2click(sender: tobject);

begin

m_frm2.showmodal;

end;     

利用自定義事件實現不同窗體間的通訊 C 篇

c 中的 事件 是當物件滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的物件不必知道需要通知誰,一旦滿足了某個條件,將自動呼叫該事件,正確通知每個需要通知的物件。通過使用事件,提高了程式的模組化程度。要在程式中使用自定義事件,需按以下步驟進行 1 宣告事件 要在...

利用自定義事件實現不同窗體間的通訊 C 篇

c 中的 事件 是當物件滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的物件不必知道需要通知誰,一旦滿足了某個條件,將自動呼叫該事件,正確通知每個需要通知的物件。通過使用事件,提高了程式的模組化程度。要在程式中使用自定義事件,需按以下步驟進行 1 宣告事件 要在...

c 用委託和事件實現不同窗體間的通訊

c 中的 事件 是當物件滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的物件不必知道需要通知誰,一旦滿足了某個條件,將自動呼叫該事件,正確通知每個需要通知的物件。通過使用事件,提高了程式的模組化程度。例子 通過form1開啟form2,改變form2上combo...

c 用委託和事件實現不同窗體間的通訊 一

c 中的 事件 是當物件滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的物件不必知道需要通知誰,一旦滿足了某個條件,將自動呼叫該事件,正確通知每個需要通知的物件。通過使用事件,提高了程式的模組化程度。例子 通過form1開啟form2,改變form2上combo...

Qt自定義事件的實現

後來我就想,那qt的發明人是怎麼定義事件的呢?其實站在qt發明人的角度,qevent就是他們的 自定義事件 ok!這就好辦了!看看qt發明人怎麼定義的qevent,看看他們怎麼用自己定義的qevent,不就回答了文章開頭的倆問題了嘛!o o 我把整個過程總結為 長官定義事件 信使傳遞事件 軍隊接收並...