2010-03-08 32 views
1

這是一個真正的新手問題。我有一個簡單的應用程序,選擇一個圖片,並在PictureBox中顯示該圖片。調用Select File對話框時出現NullReferenceException錯誤

我決定惹惱不透明屬性,所以我添加了一個計時器,並創建了這個很酷的效果,其中主窗體的不透明度每400毫秒增加20%。

問題是,現在當我點擊調用Select File對話框的按鈕時,我得到一個NullReferenceException錯誤。

private void tmrClock_Tick(object sender, EventArgs e) 
    { 
     if (ViewerForm.ActiveForm.Opacity != 1) 
     { 
     ActiveForm.Opacity = ActiveForm.Opacity + .20; 
     } 
    } 

錯誤消息指向if語句。

我在做什麼錯?

感謝

+0

ViewerForm和ActiveForm非空? – AxelEckenberger 2010-03-08 21:00:38

+0

@Obalix:'ViewerForm'是他的'Form'類的名字; 'ActiveForm'是基類'Form'類的'static'屬性,它是'null'。看到我的答案。 – SLaks 2010-03-08 21:02:32

+0

@SLaks:它不在OP的ViewerForm中,因此,這個問題。 – AxelEckenberger 2010-03-08 21:18:21

回答

3

ActiveForm屬性返回當前的重點對象Form

當您打開一個文件對話框時,重點表單不是託管的Form對象,因此ActiveForm返回null

假設你的計時器在你的表格內,你應該簡單地寫下this.Opacity。該this關鍵字是指Form對象定時器是英寸

順便說一句,當動畫完成(通過調用tmrClock.Stop()

+0

非常感謝您的回答。這解決了我的問題。 – codingguy3000 2010-03-08 21:05:06

2

當你告訴一個模式對話框應該停止計時,你的表格是不再活躍。所以ActiveForm是模式對話框,它不是Form(它是一個本地窗口),所以ActiveForm返回null。

爲什麼不提到表格本身而不是ActiveForm

private void tmrClock_Tick(object sender, EventArgs e) 
{ 
    if (this.Opacity != 1) 
    { 
     this.Opacity = ActiveForm.Opacity + .20; 
    } 
} 
相關問題