私の質問はこれに関連しています: .Net WinForms コントロールのスクリーン キャプチャをプログラムで取得する方法は?
C# で System.Windows.Forms.Control のスクリーンショットを撮りたいです。上記のリンクの質問で提案されている DrawToBitmap メソッドを使用していますが、ほとんどの場合、これが機能します。ただし、いくつかの問題があります。
問題 1 :
2 つのタブページがあります。A と B と呼びましょう。スクリーンショットを撮りたいコントロールはタブページ B にあります。タブページ A のボタンが押されたときにスクリーンショットを撮りたいです。これは、タブページ B がまだアクセスされていない場合を除いて、ほとんどの場合機能します。その場合、スクリーンショットは真っ白になります。最初にタブページ B にアクセスしてからタブページ A に戻り、ボタンをクリックしてスクリーンショットを撮ると、正常に動作します。これは、まだ行われていないタブでのコントロールのロードまたはビルドが原因であると推測していますが、正確にはわかりません (または、まったく別のものである可能性があります)。ResumeLayout、PerformLayout、Show、Update、Invalidate を使用してロードまたはビルドを強制しようとしましたが、うまくいきません。
編集:使用してこれを解決することができましたDrawToBitmap
コントロール自体ではなく、含まれているタブページ コントロールで、そのタブページで Show を実行します。
問題 2:
特定のカスタム コントロール (UserControl のサブクラス) のスクリーンショットを撮ると、スクリーンショットに小さな四角形の白い領域があります (明らかにあるべきではない場所)。長方形の領域は、ボタンやテキスト ボックスのようなコントロールの特定の部分にあるわけではないので、何が原因なのかわかりません。他のカスタム コントロール (UserControl のサブクラスでもある) では問題なく動作するため、それ自体が問題になることはありません。
編集:解決しました。その上に描画されていた空のコントロールがありました。そのコントロールの Visible を false に設定すると解決しました。