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

大家好,我是华山自控编程朱老师

今天给大家分享初学者C#常见错误以及解决方法

前几天辅导学员,学员 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即可。

点击领取上位机编程全套入门教程+工具https://s.pdb2.com/pages/20230307/CnORDNt9HimMjNS.html

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

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

免费领!自动化控制编程入门到开挂学习路径(附教程和软件工具https://blog.csdn.net/hspx668/article/details/126586129?spm=1001.2014.3001.5502

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华山自控编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值