看板 C_Sharp 關於我們 聯絡資訊
※ 引述《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)