日期:2014-05-18  浏览次数:21007 次

C# zedgraph关闭再打开 属性为null
窗口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”属性为正常,为正确!!!



我想了很久 没有想明白!

还请高手指教了 小弟在此谢过了!!


------解决方案--------------------
可能的原因会不会是这样:
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重新打开后重新挂上该委托然后再测试下
------解决方案--------------------
难道是委托没委托成功?