2017-08-14 13 views
0

PDFを作成し、各PDFの名前を作成時にリッチテキストボックスに出力するC#WinFormsアプリケーションを作成しています。私はScrollToCaret機能を使用して、各行が作成されるたびにテキストボックスを自動的にスクロールします。追加の詳細として、printメソッドはWinFormとは別のクラスにあります。フォーカスを失ったときにScrollToCaretがnull参照例外をスローする

私はに実行している問題は、プログラムがフォーカスを失ったときに、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(); 
    } 

追加のテキスト

'System.NullReferenceException' 種類の未処理の例外がPDFGenerator.exe

で発生しました

追加情報:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

フォーカスが失われてもプログラムは実行されませんが、PDFの生成中にフォーカスが失われても一貫してこの例外がスローされます。

プログラムの実行には1〜2分かかるため、バックグラウンドで実行する機能が重要です。

プログラムがフォーカスを失ったときにScrollToCaretがNull参照例外をスローするのを止める方法を教えてください。 WinForms RichTextBoxの他の機能を使用する必要がありますか?

EDIT: null参照例外は何ですか? winformが明確にインスタンス化され、機能しているときになぜスローされているのかわかりませんが、プログラムがフォーカスを失ったときに機能しなくなります。 winformがフォーカスを失ったときに、winformまたはその子コンポーネントがインスタンスを生成しないことを示すドキュメントは見つかりませんでした。

+0

フォームがnullかどうかを確認する必要があります。 – LarsTech

+0

@LarsTechフォームはnullではありません。そうでなければ、最初は印刷できません。フォーカスが失われたときにフォームがnullになる理由はわかりません。私はあなたのコメントを誤解していない限り。 –

+0

as castの直後に以下のチェックを追加してください。あなたの問題を解決するはずです。 if(form == null)戻り値: – CharithJ

答えて

-1

アプリケーションにフォーカスがない場合、ActiveFormはnullになることがあります。

Form.ActiveForm Property

アクティブなフォームが存在しない場合、現在アクティブなフォーム、またはヌルを表すフォーム。

キャストに続いてヌルチェックを追加するだけで問題をスキップする必要があります。ただし、null参照の処理は問題の解決ではありません。 PDFGenerator.Form1インスタンスをPrintメソッドに渡すより良い方法を見つける必要があります。

var form = Form.ActiveForm as PDFGenerator.Form1; 

if (form == null) 
    return; 
+1

明確な複製を再度開くのは適切ではないので、単に回答を投稿することができます。質問が実際に本当の答えを投稿するのに十分な情報を持っていない場合は特にそうです。上記は純粋な推測です。 OPは問題を確実に再現する良い[mcve]を提供していません。たとえ回答があったとしても、答えが問題に対処しても、これは正規の重複で見つかったアドバイスであり、不適切であり、Stack Overflowサイトへの有用な貢献ではありません。 –

+0

_ "ここで重要なポイントは、フォーカスが失われたときにActiveFormがnullであることです。" _ - いいえ、そうではありません。 OPは、 'ScrollToCaret()'の呼び出しで例外が発生すると主張しています。あなたが推論したように 'form'がヌルであった場合、その変数はその前に2回逆参照されているので、決してそれを得られませんでした。いずれにしても、質問に対する編集はそれを1ビット改善するものではありません。彼らは依然として本質的に例外がなぜ投げられているのかを依頼している。彼らはそれが実際のヌル参照以外のものであることを示唆することは何もしておらず、それらを扱うことは複製によって直接扱われます。 –

+1

ありがとう、私の質問がうまくいかなかったにもかかわらず、あなたは私が求めていたものに正確に答えました。私はフォームのその特定の特性について知りませんでした。アクティブフォーム。 –

関連する問題