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

作者: TameFoxx (foxx)   2015-10-26 15:24:47
※ 引述《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作存取
作者: TameFoxx (foxx)   2015-10-26 15:26:00
不過既然你只是一個輔助按鈕視窗 那直接用panel會更好
作者: flyskycat (貓爪~抓抓抓)   2015-10-26 15:47:00
感謝指導,因為視窗板面有限,所以才想說要用的時候再叫出來...
作者: YahooTaiwan (超可愛南西我老婆)   2015-10-26 18:35:00
第二種方法不會有 memory leak 的隱憂嗎
作者: sosokill (vieux)   2015-10-26 18:48:00
用ref就不會了吧?
作者: totte (totte)   2015-10-26 19:50:00
可查一下AllenKuo 控制項傳值的相關文章 盡量用OO做啊 對不起眼殘 沒注意到是WinForm sorry
作者: YahooTaiwan (超可愛南西我老婆)   2015-10-27 00:05:00
用 WeakReference 才不會吧?
作者: Litfal (Litfal)   2015-10-27 02:44:00
做個model class讓兩個form使用會比較好另外可以考慮重複使用form2,就不可能memory leak了其實form有個container會做dispose,所以應該不會mem leak
作者: YahooTaiwan (超可愛南西我老婆)   2015-10-27 06:41:00
沒記錯的話,只要有人參考你,你就不會被回收跟誰實不實做 dispose 無關GC 不就是建構在 "當有東西沒人要用時,我就自動幫你回收" 這個前提上嗎?反之,你不會預期某個元件在你用到一半時突然被回收吧? GC 可沒聰明到他能自己理解當 Form2 被回收時代表 Form1 也不需要用到這個參數了
作者: Litfal (Litfal)   2015-10-27 23:21:00
這跟GC...先不討論Form1如何回收他的子控制項,你提memoryleak是誤導。 在討論Form2參考Form1的TextBox造成該物件不能被回收之前,為什麼不先想想參考的Form2為什麼沒被回收?而且Form2比那個TextBox更佔資源,又,以這邊的父子關係,Form2沒道理會比Form1有更長的生命。

Links booklink

Contact Us: admin [ a t ] ucptt.com