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