作者proach (pazroach)
看板C_Sharp
标题Re: [问题] MDI的child之间可通讯吗?
时间Sat Jun 27 22:31:47 2009
※ 引述《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)