打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
学习C#常见错误__窗体间传值解决方法
userphoto

2023.08.31 广东

关注

大家好,我是朱老师

前几天辅导学员,学员 form1调用form2时,值没有刷新,带不过去。

修改了form1的text控件里面的值,从20改到30,然后在调用显示form2时,form2的textbox控件的值还是原来的20,没有显示最新的数字30. 就是 Form1的文本框控件的30传不到form2的textbox控件里。

软件运行效果如下:

代码截图如下:

Form1调用form2

Form2 里先通过new关键字实例化form1对象frm1,然后通过调用form1的属性方法getvalue.()赋值给h变量。最后赋值给form2的文本框控件txttspririt的text属性。

结果是txtSpirit控件的text属性值还是20,没有刷新成30.造成form1的文本框的值30一直传不过去。

这个问题是初学者很常见易犯的。就是我们常说的设计模式中的单例模式问题。解决方法有很多种,下面就介绍常用比较简单的如下三种解决方法。

第一种解决方法:在form1里面定义一个静态变量static string fromTxtSpirit。然后form1在文本框输入值后,给该静态变量设置值。最后 Form2在窗体加载事件load中从静态变量fromTxtSpirit中获取,这样的话,可以保证获取到的值是 最新的值。因为静态变量是所有对象共有变量。所有实例化的窗体都可以共享该变量。

第二种解决方法:将form1窗体句柄 传给form2. Form窗体默认是只有无参的构造函数。当然form2需要增加带参数的构造函数。 具体实现方法是首先在form2中定义一个带参数的构造函数,参数类型是Form类型。 然后在form1中调用显示form2时, 通过该有参数构造方法实例化form2, 参数传值就是form1对象的实例。这样在form2类中,就可以接收到父窗体对象的实例。该实例的所有公有成员在form2对象中都可以被访问到。当然可能默认对象控件的访问范围都是私有的。这时就在需要修改下父窗体的控件的访问属性,改成public即可。

第三种解决方法:也是我们最常用的方法,定义属性方法。在form2定义个属性,实例化form2时,实时设置该属性值。这个属性不需要是静态类型。因为每次实例化的对象不一样,所以属性也会跟着对象变化。前提就是在实例化form2时,记得给属性赋值即可。代码截图如下:

当然,除了以上三种方法外,还有其他更优雅或者安全的方法机制,比如委托等等。这里就不一一举例了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
初中生也能学的编程不走弯路先用后学(Visual Basic环境)
十天掌握VB.NET程序设计基础目录
高一年级信息科技2020空中课堂知识点梳理及“思考与讨论”-第04课:程序设计基本知识
VB-对象使用
VB编程基础教程15–使用对象 | 异次元软件世界
WinForm设置窗体默认控件焦点
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服