我正在创建一个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失去焦点时未实例化。
答案 0 :(得分:-1)
当应用程序没有焦点时,ActiveForm可能为null。
表示当前活动表单的表单,如果有表单则为null 没有活跃的形式。
只需在演员表后添加空检查即可跳过您的问题。但是,处理空引用不是您的问题的解决方案。您需要找到一种更好的方法将PDFGenerator.Form1实例传递给Print方法。
var form = Form.ActiveForm as PDFGenerator.Form1;
if (form == null)
return;