[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