※ 引述《proach (pazroach)》之銘言:
: 標題: [問題] MDI的child之間可通訊嗎?
: 時間: Sat Jun 27 19:28:42 2009
:
: 如同一般正常的 MDI,在 Form1下有好幾個 child forms,例如
:
: ChildForm1, ChildForm2...不一定是相同的 Form
:
: 請問有辦法讓這些 Form彼此互傳資料嗎?例如 ChildForm1 上傳一個
: String到 ChildForm2上處理。
:
: 如果不能彼此互傳,可以 ChildForm1丟給 Form1, Form1再轉給
: ChildForm2嗎?
:
: 多謝幫忙 <(_,_)>
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 114.43.188.212
: 推 Cloud:可以在Form1裡設一個string變數 06/27 20:06
: → Cloud:剩下的ChildForm可以利用MdiParent來存取 06/27 20:07
: → Cloud:string變數 06/27 20:07
: → proach:謝Cloud. 但這樣接收方不就要不停檢查是否有更新了嗎 06/27 20:11
: → Cloud:這樣的話,妳就要自訂events,當資料改變,就射出去 06/27 20:21
: → Cloud:資料可以利用EventArgs來傳遞 06/27 20:22
: → proach:叩謝,我試試看 :) 06/27 20:30
: → Cloud:http://tinyurl.com/qmlxf2 參考看看~~ 06/27 20:45
多謝 Cloud 提供的資料,已經成功實驗出來。為了一些因素臨時採用
VC++.Net實作的,拿出來獻醜,有需要的人可以很快修改成 VC#才是。
Form1是 MDI的 parent form, FormC是 MDI child, Form1修改,或傳送資料
到 MDI child很簡單,但我希望 MDI child也可以傳送資訊回去,甚至
傳給另外的 MDI child。
首先在 FormC內宣告新的 event, 就放在同一個 namesapce下
public ref class MsgEventArgs:System::EventArgs{
public : String ^msg;
public : MsgEventArgs( String ^inmsg ){
msg = inmsg;
}
};//end of class
在 FormC內,宣告 event與對應的 delegate
public: delegate void MsgEventHandler( MsgEventArgs ^e );
public: MsgEventHandler ^SendMessage;
public: MsgEventArgs ^ex;
FormC要送出資訊時
ex = gcnew MsgEventArgs( "hello world" );
SendMessage( ex );
休息一下 :)
接著回到 Form1的程式碼,一開始當然要
#include "FormC.h"
在宣告FormC之後,告訴他要把 FormC的 SMS event與誰掛勾
formC = gcnew FomrC( );
formC->SMS += gcnew FormC::MsgEventHandler( this, &Form1::RX );
最後寫處理方式
private: System::Void RX( MsgEventArgs ^e ){
Form1->Text = e->msg; //可以安全食用
}
其實大部分都是 delegate與 event的實作,與 MDI的關係是套用在這邊而已吧 XP
我不會 C++, 如有錯誤還請諸位大德幫忙指證 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.188.212
※ 編輯: proach 來自: 114.43.188.212 (06/27 22:33)