提问人:yigitt 提问时间:5/23/2014 最后编辑:Tim Schmelteryigitt 更新时间:5/23/2014 访问量:11294
为什么“this”有效,但“Form.Activeform”抛出NullRefernceException?
Why "this" works but "Form.Activeform" throws NullRefernceException?
问:
如果此关键字引用 Program class(Application.Run(new Form1())) 中实例化的类的当前实例
我们可以用这个关键字来访问它的属性
this .Text = "debuggging";
this .Opacity = 54;
this .ShowIcon = true;
this .Size = new Size(100, 100);
为什么不能使用 Form1.ActiveForm 实现它。*(所有属性)
只是出于好奇,但为什么
当像这样编码时
Form1.ActiveForm.Text = "debugla";
Form1.ActiveForm.Opacity = 54;
Form1.ActiveForm.ShowIcon = true;
Form1.ActiveForm.Size = new Size(100, 100);
并且 ActiveForm 必须为我们带来当前使用的活动表单
它抛出 nullreference 异常为什么?
答:
5赞
Sayse
5/23/2014
#1
ActiveForm 返回活动表单...这意味着,如果您的窗口没有焦点,则它不处于活动状态。因此,以这种方式使用它,您的程序将面临产生错误的巨大风险。
使用可确保您正在访问要更改的表单this
您还应该注意,这是一个静态属性,因此它与您使用它的窗体没有任何链接,如果您在应用程序中打开了任何其他窗口,那么您的更改可能会应用于这些其他对话框ActiveForm
评论
0赞
yigitt
5/23/2014
你说得对,问题是调试,因为我在表单出现之前调试了应用程序,所以控件没有显示或单击它,这意味着没有焦点,这也意味着 isN't 处于活动状态,所以 Form1.Activeform 为 Null,但如果 ı 不调试并让表单打开,显示,这 =(等于)表单。Activeform,因为形式在展示后得到了焦点,所以很高兴学习差异谢谢
7赞
Tim Schmelter
5/23/2014
#2
MSDN:Form.ActiveForm
:“表示当前活动窗体的窗体,如果没有活动窗体,则为 null。
所以可能是因为你正在调试表单不是活动状态(没有焦点),所以它返回。null
评论
0赞
yigitt
5/23/2014
你说得对,问题是调试,因为我在表单出现之前调试了应用程序,所以控件没有显示或单击它,这意味着没有焦点,这也意味着 isN't 处于活动状态,所以 Form1.Activeform 为 Null,但如果 ı 不调试并让表单打开,显示,这 =(等于)表单。Activeform,因为形式在展示后得到了焦点,所以很高兴学习差异谢谢
0赞
Hassan
5/23/2014
#3
您可以这样做:
Form currentForm = Form.ActiveForm;
if(currentForm != null)
{
//use currentForm properties
}
Form.ActiveForm
获取此应用程序的当前活动窗体
。
而这
指的是 的当前实例。Form1
评论
Form1.ActiveForm
static
Form
ActiveForm == this
Form
Form1
this