[VB.NET]请问用MDI管理的子表单要怎么互相存取呢

楼主: Prochihua (颓废浪子)   2013-11-22 00:09:29
请输入专案类型(网站专案或者应用程式专案):应用程式
不好意思,想请问一下
假设我有三个表单
form1为MdiContainer
然后在form1 Load的event中
Dim f2 As New Form2
f2.MdiParent = Me
f2.Show()
然后在form2 Load的event中
Dim f3 As New Form3
f3.MdiParent = Me.MdiParent
f3.Show()
这样form2跟form3都可以读取到彼此的资料
如textbox2 in form2 ,textbox3 in form3
在form2使用 MsgBox(Form3.TextBox3.Text)
可以正确显示出来
但是更改了TextBox3的资料之后
再执行 MsgBox(Form3.TextBox3.Text)
显示出来的资料并不会因为我改变了资料而改变
(在form3也是一样的情况)
Google了一段时间,找到的都是一个form 产生另一个form
然后彼此之间可以正确存取资料
但是这种用MDI的两个child form之间的沟通还没爬到
不晓得有没有大大能指点一下呢?
在此先说声谢谢^^
作者: johnpage (johnpage)   2012-01-22 06:34:00
不是有爸爸
楼主: Prochihua (颓废浪子)   2012-01-22 09:22:00
您好,爸爸跟小孩之间可以沟通,小孩跟小孩之间没办法@@
作者: MOONRAKER (㊣牛鹤鳗毛人)   2012-01-22 11:11:00
阿爸爸当然知道自己有几个小孩吧MSDN http://goo.gl/Bx25kn这边讨论可以的话也详细看一看 http://goo.gl/R9xOVi
作者: johnpage (johnpage)   2012-01-22 18:06:00
大儿子跟小儿子沟通不良,可以透过爸爸来处理,毕竟爸爸还是最了解自己的小孩。
楼主: Prochihua (颓废浪子)   2012-01-23 10:25:00
谢谢两位大大,M兄提供的网址我看了,不太懂@@综合j兄和M兄的说法,就是只能把资料先传给爸爸再转达?
作者: MOONRAKER (㊣牛鹤鳗毛人)   2012-01-23 10:56:00
要做什么跟object讲就好 VB有OO到那种地步吗…阿你先找到爸爸 再从他的MdiChildren()找出小孩不就是兄弟了
楼主: Prochihua (颓废浪子)   2012-01-23 11:14:00
谢谢M兄,终于能用了CType(Me.MdiParent.MdiChildren(1), Form3).TextBox3.T先找到爸爸Me.Mdiparent,然后再找到小孩Mdichildren至于为什么要加CType我也不知道只是之前爬到的文都有加,就试着加加看@@
作者: johnpage (johnpage)   2012-01-23 20:38:00
资料不是原本的成员,借由ctype抓取
作者: MOONRAKER (㊣牛鹤鳗毛人)   2012-01-23 22:15:00
强迫型别转换,第二个参数应该是form不是form3转换是转成form这个类别,不是特定的form个体你可以拿掉ctype()看看,以前写VB.NET 1.1有时可以但是现在检查应该比较严格了
楼主: Prochihua (颓废浪子)   2012-01-25 08:32:00
To M兄,参数改成form的话,会出现:'TextBox3' 不是 'System.Windows.Forms.Form' 的成员改成:Me.MdiParent.MdiChildren(1).TextBox3.Text = Te错误讯息同上改成:Me.MdiParent.MdiChildren(1).Form3的话'Form3' 不是 'System.Windows.Forms.Form' 的成员Tp j兄:您的说法比网络上找到的说明来的易懂一点^^
作者: MOONRAKER (㊣牛鹤鳗毛人)   2012-01-25 17:31:00
那你照你现在这样写就好了 把每个textbox再ctype()可以绕过这个错误 但是那样程式更难看 X*
楼主: Prochihua (颓废浪子)   2012-01-25 21:48:00
To M兄:现在才试了一个textbox就已经觉得程式码超丑@@等整个弄完再用with美容一下好了^^
作者: johnpage (johnpage)   2012-01-25 23:00:00
other way, you can use public on text3.
楼主: Prochihua (颓废浪子)   2012-01-26 00:09:00
To j兄,用Public的方式我有试过,虽然可以执行,但是实际上不能用,不过也不排除是我的使用方式错误@@
作者: johnpage (johnpage)   2012-01-26 12:43:00
没有实体资料可存取?
楼主: Prochihua (颓废浪子)   2012-01-26 17:40:00
假设TextBox3.Text默认值是123的话,在Form2是可以取得123的值,但是如果在form2将textbox3.text的值改成456然后再读取,显示出来的值还是123,不会变成456@@或许我说的不是很清楚,j兄可以看 http://goo.gl/PGCO61我把测试用的proj打包,弄成public的话,只能读到默认值但是用M兄的方式就可以读取跟修改了
作者: johnpage (johnpage)   2012-01-26 23:28:00
程式观念有误,程式是办的到请注意实体资料的观念注意f3,这步骤是对的,只是你没走完
楼主: Prochihua (颓废浪子)   2012-01-27 09:04:00
To J兄:谢谢提醒,我再去找些资料来看看,不过印象中没看到过有跟您提醒的地方相关连资料,我会再试试看,谢谢
作者: johnpage (johnpage)   2012-01-27 19:23:00
提示,form2 and form3 只是ㄧ种类别,资料格式ㄧ种,所以使用上要new. 不是直接互叫。还有public的位置也错了
楼主: Prochihua (颓废浪子)   2012-01-29 12:32:00
To j兄:这两天又把以前爬过的文重爬了一次,觉得怪怪的form2、form3在一开始就已经Dim f3 As New Form3那使用的时候再new,不是又多一个form3出来?另外我检查了一下,要传值的textbox我有设成Public还是说您是建议我设一个Public的变量来供资料交换用吗?例如在form1加 Public MyValue2 As String之类的?

Links booklink

Contact Us: admin [ a t ] ucptt.com