要實現子窗體與父窗體之間的通訊,有多種方法(比如:過載子窗體的建構函式,將父窗體的引用作為引數傳遞給子窗體)。下面我要介紹的是利用自定義事件的方法,它能夠最大程度的避免模組之間的耦合,充分體現物件導向的優點。
先將效果圖展示給大家:
[[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 我把整個過程總結為 長官定義事件 信使傳遞事件 軍隊接收並...