为什么“this”有效,但“Form.Activeform”会抛出NullRefernceException?

时间:2014-05-23 09:51:34

标签: c#

如果此关键字引用类的当前实例作为程序类中的实例(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异常为什么?

3 个答案:

答案 0 :(得分:5)

MSDN: Form.ActiveForm“表示当前有效表单的表单,如果没有活动表单,则为 null 。”

因此,可能是因为您正在调试表单未激活(没有焦点),因此它返回null

答案 1 :(得分:4)

ActiveForm返回活动表单...这意味着如果您的窗口没有焦点,那么它就不会处于活动状态。因此,通过这种方式使用它会大大降低程序产生错误的风险。

使用this可确保您访问要更改的表单

您还应该注意ActiveForm是一个静态属性,因此如果您的应用程序中打开了任何其他窗口,则它与您使用它的表单没有任何关联,那么您的更改可能适用于其他对话框

答案 2 :(得分:0)

你可以这样做:

 Form currentForm = Form.ActiveForm;

 if(currentForm != null)
 {
     //use currentForm properties
 }

Form.ActiveForm gets the currently active form for this application

this指的是Form1的当前实例。