焦点丢失时,ScrollToCaret会抛出空引用异常

时间:2017-08-14 21:19:18

标签: c# winforms

我正在创建一个C#WinForms应用程序,该应用程序创建PDF并在创建时将每个PDF的名称输出到富文本框中。我正在使用ScrollToCaret功能在创建每一行时自动向下滚动文本框。作为一个额外的细节,print方法与WinForm是一个单独的类。

我遇到的问题是每当程序失去焦点时,ScrollToCaret函数都会抛出NullReferenceException

这是每次抛出错误的代码段:

private void Print<T>(T str)
    {
        var form = Form.ActiveForm as PDFGenerator.Form1;

        try
        {
            form.richTextBox1.AppendText(str + Environment.NewLine);
        }
        catch
        {
            form.richTextBox1.AppendText("Couldn't print string");
        }

        form.richTextBox1.ScrollToCaret();
    }

附加文字

  

未处理的类型&#39; System.NullReferenceException&#39;发生在PDFGenerator.exe

中      

附加信息:未将对象引用设置为对象的实例。

如果程序没有失去焦点,程序不会遇到任何问题,但如果它在生成PDF时失去焦点,它会一直抛出此异常。

该程序需要一两分钟才能运行,因此在后台运行它的能力非常重要。

当程序失去焦点时,如何阻止ScrollToCaret抛出Null Reference异常?我是否必须使用WinForms RichTextBox的其他一些功能?

编辑:我理解空引用异常是什么;我不明白为什么当winform明确地实例化并运行时它被抛出,但当程序失去焦点时停止运作。我还没有发现任何文档说winform或其子组件在winform失去焦点时未实例化。

1 个答案:

答案 0 :(得分:-1)

当应用程序没有焦点时,ActiveForm可能为null。

Form.ActiveForm Property

  

表示当前活动表单的表单,如果有表单则为null   没有活跃的形式。

只需在演员表后添加空检查即可跳过您的问题。但是,处理空引用不是您的问题的解决方案。您需要找到一种更好的方法将PDFGenerator.Form1实例传递给Print方法。

var form = Form.ActiveForm as PDFGenerator.Form1;

if (form == null)
    return;