Skip to main content
 首页 » 编程设计

C# zedgraph关闭再打开 属性为null (转) --做多个任务切换时,第二次打开zedgraph会不成功

2022年07月19日160sharpest
按语:
   在本人项目中,第一次运行程序,利用委托,显示曲线没有问题;切换任务后,再次利用委托进行曲线显示时,就会出现问题,无法显示曲线,其他控件无此问题。
   问题是:委托没有释放的原因,导致后面的委托没有执行。
 ====================================================================
 
窗口1下有一个zedgraph(zg1就是zedgraph),里面有1个按钮和一个委托:

按钮1:
zg1.GraphPane.XAxis.Scale.Max = 3000;
zg1.GraphPane.XAxis.Scale.Min = 0;

委托1:
zg1.GraphPane.XAxis.Scale.Max = 5000;
zg1.GraphPane.XAxis.Scale.Min = 0;

窗口2下有一个按钮,这个按钮的作用就是调用窗口1zedgraph中的委托;



现在问题如下:
1)当我第一次打开窗口1时(窗口1,zedgraph所在窗口初始化完毕了),此时我利用中断模式调式,发现:无论我是按下窗口1中的按钮,还是去按窗口2中的按钮:均能够正确执行”zg1.GraphPane.XAxis.Scale.Max = 3000;zg1.GraphPane.XAxis.Scale.Min = 0;” 和“zg1.GraphPane.XAxis.Scale.Max = 5000;
zg1.GraphPane.XAxis.Scale.Min = 0;”

为正确;


2)但是当我第一次打开窗口1后,关闭窗口1(zedgraph所在窗口),再重新打开窗口1(关闭后第二次打开zedgraph所在窗口);
此时:我点击窗口1(zedgraph所在窗口)的按钮,执行代码“zg1.GraphPane.XAxis.Scale.Max = 3000;
zg1.GraphPane.XAxis.Scale.Min = 0;”为正确;
我点击窗口2中的按钮,执行委托代码“zg1.GraphPane.XAxis.Scale.Max = 5000;
zg1.GraphPane.XAxis.Scale.Min = 0;”,就错误,中断模式发现,此状态下代码中的“zg1.GraphPane”属性为null!!!!

为错误!!!


就是说为什么在窗口1关闭在重新打开(第二次打开)的情况下,别的窗口的委托函数执行到窗口1(zedgraph)所在窗口时,“zg1.GraphPane”属性为null,为错误????
而在同样的情况下,不用别的窗口的委托,直接使用窗口1(zedgraph所在窗口)的按钮等控件时,,“zg1.GraphPane”属性为正常,为正确!!!


我想了很久 没有想明白!

还请高手指教了 小弟在此谢过了!!
146点赞收藏4
 
 写回复
4 条回复
 切换为时间正序
请发表友善的回复…
发表回复
 
熙风 2012-08-11
难道是委托没委托成功?
 
jxy21c 2012-08-11
可能的原因会不会是这样:
1、打开窗口1(no1),窗口2调用的委托挂接到 窗口1(no1).zg1
2、关闭窗口1(no1)
3、打开窗口1(no2)
此时在内存中窗口1(no1).zg1仍没有释放,你调试的窗口2调用的委托仍作用于这个对象即窗口1(no1).zg1,而此时窗口1(no1)已关闭,所以窗口1(no1).zg1.GraphPane为null
打开窗口1(no2).zg1.GraphPane正常,所以你窗口1(no2)中的按钮工作正常
建议窗口1关闭前将该委托删除
窗口1重新打开后重新挂上该委托然后再测试下
 
maji_lulu 2012-08-11
似乎和单例模式有关系
 
ddabeijixiong2012 2012-08-11
非常感谢大家的回复!!

更加感谢jxy21c(飞刀)的回复!!

我只能说 您真的是太专业了!!

真的如你所说,我在窗口关闭时将委托赋值为null,然后无论我第几次打开,都没有问题了

哈哈

小弟在此谢过了!

非常感谢

结贴咯
https://bbs.csdn.net/topics/390170429?list=28602607

本文参考链接:https://www.cnblogs.com/xihong2014/p/15089849.html