作者Prochihua (頹廢浪子)
看板Visual_Basic
標題[VB.NET]請問用MDI管理的子表單要怎麼互相存取呢
時間Fri Nov 22 00:09:29 2013
請輸入專案類型(網站專案或者應用程式專案):應用程式
不好意思,想請問一下
假設我有三個表單
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之間的溝通還沒爬到
不曉得有沒有大大能指點一下呢?
在此先說聲謝謝^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.57.113
1F:推 johnpage:不是有爸爸 11/22 06:34
2F:→ Prochihua:您好,爸爸跟小孩之間可以溝通,小孩跟小孩之間沒辦法@@ 11/22 09:22
3F:→ MOONRAKER:阿爸爸當然知道自己有幾個小孩吧 11/22 11:11
6F:推 johnpage:大兒子跟小兒子溝通不良,可以透過爸爸來處理,畢竟爸爸 11/22 18:06
7F:→ johnpage:還是最了解自己的小孩。 11/22 18:06
8F:→ Prochihua:謝謝兩位大大,M兄提供的網址我看了,不太懂@@ 11/23 10:25
9F:→ Prochihua:綜合j兄和M兄的說法,就是只能把資料先傳給爸爸再轉達? 11/23 10:32
10F:→ MOONRAKER:要做什麼跟object講就好 VB有OO到那種地步嗎… 11/23 10:56
11F:→ MOONRAKER:阿你先找到爸爸 再從他的MdiChildren()找出小孩 11/23 10:57
12F:→ MOONRAKER:不就是兄弟了 11/23 10:57
13F:→ Prochihua:謝謝M兄,終於能用了 11/23 11:14
14F:→ Prochihua:CType(Me.MdiParent.MdiChildren(1), Form3).TextBox3.T 11/23 11:14
15F:→ Prochihua:先找到爸爸Me.Mdiparent,然後再找到小孩Mdichildren 11/23 11:16
16F:→ Prochihua:至於為什麼要加CType我也不知道 11/23 11:17
17F:→ Prochihua:只是之前爬到的文都有加,就試著加加看@@ 11/23 11:17
18F:推 johnpage:資料不是原本的成員,借由ctype抓取 11/23 20:38
19F:→ MOONRAKER:強迫型別轉換,第二個參數應該是form不是form3 11/23 22:15
20F:→ MOONRAKER:轉換是轉成form這個類別,不是特定的form個體 11/23 22:16
21F:→ MOONRAKER:你可以拿掉ctype()看看,以前寫VB.NET 1.1有時可以 11/23 22:17
22F:→ MOONRAKER:但是現在檢查應該比較嚴格了 11/23 22:17
23F:→ Prochihua:To M兄,參數改成form的話,會出現: 11/25 08:32
24F:→ Prochihua:'TextBox3' 不是 'System.Windows.Forms.Form' 的成員 11/25 08:33
25F:→ Prochihua:改成:Me.MdiParent.MdiChildren(1).TextBox3.Text = Te 11/25 08:34
26F:→ Prochihua:錯誤訊息同上 11/25 08:34
27F:→ Prochihua:改成:Me.MdiParent.MdiChildren(1).Form3的話 11/25 08:36
28F:→ Prochihua:'Form3' 不是 'System.Windows.Forms.Form' 的成員 11/25 08:37
29F:→ Prochihua:Tp j兄:您的說法比網路上找到的說明來的易懂一點^^ 11/25 08:43
30F:→ MOONRAKER:那你照你現在這樣寫就好了 把每個textbox再ctype() 11/25 17:31
31F:→ MOONRAKER:可以繞過這個錯誤 但是那樣程式更難看 X* 11/25 17:32
32F:→ Prochihua:To M兄:現在才試了一個textbox就已經覺得程式碼超醜@@ 11/25 21:48
33F:→ Prochihua:等整個弄完再用with美容一下好了^^ 11/25 21:49
34F:推 johnpage:other way, you can use public on text3. 11/25 23:00
35F:→ Prochihua:To j兄,用Public的方式我有試過,雖然可以執行,但是實 11/26 00:09
36F:→ Prochihua:際上不能用,不過也不排除是我的使用方式錯誤@@ 11/26 00:10
37F:→ johnpage:沒有實體資料可存取 11/26 12:43
38F:→ johnpage:? 11/26 12:43
39F:→ Prochihua:假設TextBox3.Text預設值是123的話,在Form2是可以取得 11/26 17:40
40F:→ Prochihua:123的值,但是如果在form2將textbox3.text的值改成456 11/26 17:41
41F:→ Prochihua:然後再讀取,顯示出來的值還是123,不會變成456@@ 11/26 17:41
43F:→ Prochihua:我把測試用的proj打包,弄成public的話,只能讀到預設值 11/26 17:51
44F:→ Prochihua:但是用M兄的方式就可以讀取跟修改了 11/26 17:51
45F:推 johnpage:程式觀念有誤,程式是辦的到 11/26 23:28
46F:→ johnpage:請注意實體資料的觀念 11/26 23:28
47F:推 johnpage:注意f3,這步驟是對的,只是你沒走完 11/26 23:39
48F:→ Prochihua:To J兄:謝謝提醒,我再去找些資料來看看,不過印象中沒 11/27 09:04
49F:→ Prochihua:看到過有跟您提醒的地方相關連資料,我會再試試看,謝謝 11/27 09:05
50F:推 johnpage:提示,form2 and form3 只是ㄧ種類別,資料格式ㄧ種,所 11/27 19:23
51F:→ johnpage:以使用上要new. 不是直接互叫。還有public的位置也錯了 11/27 19:23
52F:→ Prochihua:To j兄:這兩天又把以前爬過的文重爬了一次,覺得怪怪的 11/29 12:32
53F:→ Prochihua:form2、form3在一開始就已經Dim f3 As New Form3 11/29 12:33
54F:→ Prochihua:那使用的時候再new,不是又多一個form3出來? 11/29 12:34
55F:→ Prochihua:另外我檢查了一下,要傳值的textbox我有設成Public 11/29 12:35
56F:→ Prochihua:還是說您是建議我設一個Public的變數來供資料交換用嗎? 11/29 12:37
57F:→ Prochihua:例如在form1加 Public MyValue2 As String之類的? 11/29 12:37