2010-03-08 69 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; 
    } 
} 
相关问题