C# zedgraph關閉再開啟 屬性為null (轉)
阿新 • • 發佈:2021-08-02
視窗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”屬性為正常,為正確!!!
我想了很久 沒有想明白!
還請高手指教了 小弟在此謝過了!! 分享 寫回復 4 條回覆 切換為時間正序 請發表友善的回覆… 發表回覆 熙風2012-08-11 難道是委託沒委託成功? 贊 jxy21c2012-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_lulu2012-08-11
似乎和單例模式有關係
贊
ddabeijixiong20122012-08-11
非常感謝大家的回覆!!
更加感謝jxy21c(飛刀)的回覆!!
我只能說 您真的是太專業了!!
真的如你所說,我在視窗關閉時將委託賦值為null,然後無論我第幾次開啟,都沒有問題了
哈哈
小弟在此謝過了!
非常感謝
結貼咯 https://bbs.csdn.net/topics/390170429?list=28602607
按鈕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”屬性為正常,為正確!!!
我想了很久 沒有想明白!
還請高手指教了 小弟在此謝過了!! 分享 寫回復 4 條回覆 切換為時間正序 請發表友善的回覆… 發表回覆 熙風2012-08-11 難道是委託沒委託成功? 贊 jxy21c2012-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重新開啟後重新掛上該委託然後再測試下
更加感謝jxy21c(飛刀)的回覆!!
我只能說 您真的是太專業了!!
真的如你所說,我在視窗關閉時將委託賦值為null,然後無論我第幾次開啟,都沒有問題了
哈哈
小弟在此謝過了!
非常感謝
結貼咯 https://bbs.csdn.net/topics/390170429?list=28602607