Re: [問題] 請教兩表單即時傳值問題

看板C_Sharp (C#)作者 (foxx)時間9年前 (2015/10/26 15:24), 9年前編輯推噓8(8015)
留言23則, 6人參與, 最新討論串2/3 (看更多)
※ 引述《flyskycat (貓爪~抓抓抓)》之銘言: : 各位先進好 : 我目前在 Windows Form 程式撰寫過程中遇到的問題及架構描述如下: : 架構 : 1.程式具備兩個兩個視窗 Form1 主視窗及 Form2 輔助按鈕視窗。 : 2.Form2 已寫程類別庫供 Form1 使用。 : 3.當點擊 Form1 的 TextBox 後,會建立 Form2 實體並將視窗顯示出來供使用者點選按 : 紐,未選到任何 TextBox 則 Form2 消失。點擊 Form1 其他 TextBox 則再次顯示 : Form2。 : 4.Form1 具備多個 TextBox,用來接收 Form2 按鈕所按下的值,當 Form2 按一下 "1", : 則 Form1 的 TextBox 就顯示 1;當 Form2 按下 "2",則 Form1 的 TextBox 就顯示 : 12,依此類推。當 Form2 按下按鈕,Form1 的 TextBox 就更新其內容。 : 問題 : 1.因為我採用的是 Form1 的 TextBox 被 Click 之後,才將 Form2 視窗建立出來。所以 : 我應該如何讓 Form2 知道 Form1 是哪一個 TextBox 被選擇到? : 2.因為每輸入一個值,Form1 的 TextBox 就需要馬上更新數值,所以我應該怎麼傳值比 : 較好呢? : 因為測試了幾天還是寫不出來,希望各位先進能給我一些概念提示,我再自行找資料測試 : 真的再寫不好,再將程式碼放上來請各位指導。 花點時間回文好了,希望原PO無論有無看懂都回應一下 幾個方法 1. Form1有幾個TextBox就寫幾個function 例 private void TextBox1Input(String input) { TextBox1.Text+=input; } private void TextBox1_Click(object sender, EventArgs e) { Form2 fm2 = new Form2() fm2.textinput+=TextBox1Input; } 然後在Form2上面宣告一個Action叫作textinput public Action<string> textinput 當Form2的按鍵按下後 textinput.Invoke("text"); 2. 第二種方法可能會比較適合原po 非常簡單 在Form2的建構子上加一個TextBox 然後Form1要建立Form2的時候將那個TextBox傳給Form2 Form2就可以直接對那個TextBox作存取 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.239.229 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1445844289.A.05C.html

10/26 15:26, , 1F
不過既然你只是一個輔助按鈕視窗 那直接用panel會更好
10/26 15:26, 1F

10/26 15:47, , 2F
感謝指導,因為視窗板面有限,所以才想說要用的時候再
10/26 15:47, 2F

10/26 15:47, , 3F
叫出來...
10/26 15:47, 3F

10/26 18:35, , 4F
第二種方法不會有 memory leak 的隱憂嗎
10/26 18:35, 4F

10/26 18:48, , 5F
用ref就不會了吧?
10/26 18:48, 5F

10/26 19:50, , 6F
可查一下AllenKuo 控制項傳值的相關文章 盡量用OO做
10/26 19:50, 6F

10/26 19:51, , 7F
啊 對不起眼殘 沒注意到是WinForm sorry
10/26 19:51, 7F

10/27 00:05, , 8F
用 WeakReference 才不會吧?
10/27 00:05, 8F

10/27 02:44, , 9F
做個model class讓兩個form使用會比較好
10/27 02:44, 9F

10/27 02:46, , 10F
另外可以考慮重複使用form2,就不可能memory leak了
10/27 02:46, 10F

10/27 02:50, , 11F
其實form有個container會做dispose,所以應該不會mem leak
10/27 02:50, 11F

10/27 06:41, , 12F
沒記錯的話,只要有人參考你,你就不會被回收
10/27 06:41, 12F

10/27 06:42, , 13F
跟誰實不實做 dispose 無關
10/27 06:42, 13F
是這樣沒錯

10/27 06:44, , 14F
GC 不就是建構在 "當有東西沒人要用時,我就自動幫你
10/27 06:44, 14F

10/27 06:44, , 15F
回收" 這個前提上嗎?
10/27 06:44, 15F

10/27 06:45, , 16F
反之,你不會預期某個元件在你用到一半時突然被回收
10/27 06:45, 16F

10/27 06:45, , 17F
吧? GC 可沒聰明到他能自己理解當 Form2 被回收時代
10/27 06:45, 17F

10/27 06:45, , 18F
表 Form1 也不需要用到這個參數了
10/27 06:45, 18F
我不太清楚哪裡會有問題耶 你可以舉個例子嗎?

10/27 23:21, , 19F
這跟GC...先不討論Form1如何回收他的子控制項,你提memory
10/27 23:21, 19F

10/27 23:22, , 20F
leak是誤導。 在討論Form2參考Form1的TextBox造成該物件不
10/27 23:22, 20F

10/27 23:23, , 21F
能被回收之前,為什麼不先想想參考的Form2為什麼沒被回收?
10/27 23:23, 21F

10/27 23:24, , 22F
而且Form2比那個TextBox更佔資源,又,以這邊的父子關係,
10/27 23:24, 22F

10/27 23:24, , 23F
Form2沒道理會比Form1有更長的生命。
10/27 23:24, 23F
※ 編輯: TameFoxx (125.227.239.229), 10/28/2015 09:56:06
文章代碼(AID): #1MBTL11S (C_Sharp)
文章代碼(AID): #1MBTL11S (C_Sharp)