分享

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

 吴敬锐 2023-08-31 发布于广东

大家好,我是朱老师

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

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

软件运行效果如下:

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

代码截图如下:

Form1调用form2

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

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

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

结果是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时,记得给属性赋值即可。代码截图如下:

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多