dポイントプレゼントキャンペーン実施中!

WindowsXP, vb.net2005で開発しております。

プログラム実行時にフォームを印刷したいと考えております。
フォーム上には下記の3種類のコントロールが貼り付けてあります。
 ラベル、
 picturebox(イメージを表示)、
 panel(バーコードを表示)

印刷はPrintDocumentを使用しています。
フォームをキャプチャーし、画像を印刷するようにしています。
印刷を行うと、必ずpictureboxの画像が最前面に表示されてしまいます。
フォームに指定した重なり順のまま印刷するにはどうすればよいのでしょうか?

以下、PrintDocument のPrintPageのソースです。

Private Sub pd_PrintPage(
 ByVal sender As System.Object,
 ByVal e As System.Drawing.Printing.PrintPageEventArgs)
 Handles pd.PrintPage

 'コントロールの外観を描画するBitmapの作成
 Dim bmp As New Bitmap(Me.Size.Width, Me.Size.Height)

 'キャプチャする
 Me.DrawToBitmap(bmp,
         New Rectangle(0, 0, Me.Size.Width,
         Me.Size.Height))
 '画像を描画する
 e.Graphics.DrawImage(bmp, 0, 0, e.PageBounds.Width,
           e.PageBounds.Height)
 '後始末
 bmp.Dispose()

 '次のページがないことを通知する
 e.HasMorePages = False

End Sub

A 回答 (1件)

MSDN LibraryにDrawToBitmap()では、コンテナでは、Zオーダーの逆順になると書いてあるので、その前に、最前面に置きたいコントロールをBringToFront()で最前面にもっていき、最背面に持っていきたいものをSendToBack()で最背面にするとよいかと思います。


そして、印刷が終わったら、元に戻す処理を書くと良いと思います。

参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/297 …
    • good
    • 0
この回答へのお礼

なるほど。ありがとうございます。

コントロールを動的に追加しているので
順番を記録しておいて入れ替える処理を入れます。

全然理由がわからなかったのでとても助かりました。

ありがとうございました。

お礼日時:2009/09/22 10:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!