作者liunate (测试)
看板C_Sharp
标题Re: [问题] 请问一下两个form之间讯息如何互传?
时间Sun Sep 12 20:56:13 2004
※ 引述《Ovaltine1015 (寻找我的Tone!!)》之铭言:
: 不好意思,我又来发问了,由於刚接触windows forms,
: 所以蛮多介面只会拉而不知其所以然,
: 所以小弟又来请教各位前辈一些问题了,
: 现在我有一个主要的form ==> Painter(主要是做绘图的)
: 然後我又弄了另一个form ==> TextLayer
: (这主要是想让使用管理输入的文字,有点像photoshop里面的Layer)
: ------------------------- 想达到的功能 ----------------------------
: 当使用者在Painter按下toolbar其中一个按钮时,
: 我就使用TextLayer.Show()叫出视窗,
: 然後在TextLayer中,当使用者按下一个删除钮时,
: 我必须更新宣告於Painter中储存文字的ArrayList(称textArray),
: 使其textArray少一个字串,并同时呼叫Painter的Invalidate(),
: 让整个Painter能绘制最新的画面......
: --------------------------------------------------------------------
: 我之前为了能更新那ArrayList,将其宣告为static,
: 然後直接在TextLayer中某个ButtonClick函式中直接存取Painter.textArray,
: 但是我却不知如何通知Painter重会显示区域....
: 所以想请问各位前辈,在两个form之间互传讯息时,有没有什麽其他的方式?
不一定要用static,这样每次使用前你都要将该ArrayList作预设值处理有点不方便。
你可以在TextLayer的类别程式码中宣告一个form类别成员。每次从Painter叫出
TextLayer的时候,将TextLayer物件实体中的该form类别成员指向为现在正在
使用的Painter(也是form类别成员),如此一来在TextLayer也可以存取Painter类别物
件实体的成员或方法了。
e.g., (in Painter)
dim MyTextLayer as new TextLayer()
MyTextLayer.form_Painter = me
MyTextLayer.Show()
: 另外,我该如何在ButtonClick函式中通知Painter该重新绘制显示区域呢?
如上所述,藉由TextLayer物件实体的成员来存取Painter物件实体的成员或方法
换言之就是在Painter类别中撰写一个绘制显示区域的方法
: 以下是TextLayer中的函式....
: private void btn_DelText_Click(object sender, System.EventArgs e)
: {
: this.Close();
: if(TextList.SelectedIndex>=0)
: PainterPro.DeleteText(TextList.SelectedIndex);
: }
: 想请问一下那个sender,指得是那个物件?
: 是TextLayer吗? 有办法从这里access到Painter这个物件吗?
我记得好像是Button
: 感谢大家耐心看完,还烦请各位前辈指导了~~~~
: 最後还想请问一下各位,这部分是否有哪些不错的参考书籍或是网站呢?
: 我觉得我现在只会拉来拉去,却不知道整个脉络、概念,感觉有点不踏实,
: 还请各位前辈多多推荐优良读物......谢谢大家...... ^^
一般市面上都会大略地解说原理,可以先参考看看
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.68.79.170
1F:推 Ovaltine1015:谢谢您的指导~~~ ^^ 140.113.185.47 09/13