您的位置首页  散文随笔

一看就会试图共享时出现错误(试图共享时出现错误,句柄无效)

大家好,我是朱老师前几天辅导学员,学员 form1调用form2时,值没有刷新,带不过去。修改了form1的text控件里面的值,从20改到30

一看就会试图共享时出现错误(试图共享时出现错误,句柄无效)

 

大家好,我是朱老师前几天辅导学员,学员 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时,记得给属性赋值即可代码截图如下:

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

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186