tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataGridViewを含むFormを印刷したい
記事No7724
投稿日: 2008/06/23(Mon) 18:37
投稿者皐月
こんにちは、いつもお世話になっております。

VB2005でDataGridViewを含むFormを作成しました。これをメニューの「印刷」の項目を選択して、印刷したいと思います。
DataGridViewの印刷についてはネット上にたくさんあるようでいくつか試したのですが、DataGridViewの中身だけを印刷するというものが多く、Formごと(画面に見えている状態そのまま)印刷するというのは見つけることができませんでした。

今現在の印刷のコードは以下のようになっております。

    Private Sub PrintPToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintPToolStripMenuItem.Click
        Dim Ret As DialogResult
        Dim a As String

        PrintDialog1.PrinterSettings = New Printing.PrinterSettings
        PrintDialog1.AllowSelection = True
        Ret = PrintDialog1.ShowDialog()

        If Ret = Windows.Forms.DialogResult.OK Then
            a = PrintDialog1.PrinterSettings.PrinterName
            PrintForm1.PrinterSettings.PrinterName = a
            PrintForm1.PrinterSettings.DefaultPageSettings.Landscape = True
            PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.FullWindow)
        End If
    End Sub

この状態で印刷を行いますと、DataGridViewが表示される場所だけすっぽり抜けてしまった状態でForm画面が印刷されてしまいます。DataGridViewを含めて印刷するにはどうすればよいのでしょうか?

[ツリー表示へ]
タイトルRe: DataGridViewを含むFormを印刷したい
記事No7725
投稿日: 2008/06/24(Tue) 11:39
投稿者花ちゃん
>この状態で印刷を行いますと、DataGridViewが表示される場所だけすっぽり
>抜けてしまった状態でForm画面が印刷されてしまいます。
>DataGridViewを含めて印刷するにはどうすればよいのでしょうか?

試してみましたが、問題なく DataGridView のデータも表示した状態で印刷されます。
ひょっとして、VB2005 のサービスパックは?


PrintForm クラス を使って印刷 

Imports Microsoft.VisualBasic.PowerPacks.Printing

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   Dim pf As New PrintForm
   pf.Form = Me
   pf.PrintAction = Printing.PrintAction.PrintToPrinter
   pf.Print()
End Sub



PrintForm コンポーネントを使って FullWindow を印刷するなら下記でもできましたが。

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   PrintForm1.PrintAction = Printing.PrintAction.PrintToPrinter
   PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.FullWindow)
   Me.Refresh()
End Sub

[ツリー表示へ]
タイトルRe^2: DataGridViewを含むFormを印刷したい
記事No7727
投稿日: 2008/06/24(Tue) 14:18
投稿者花ちゃん
> 試してみましたが、問題なく DataGridView のデータも表示した状態で印刷されます。

オペレーティング システムによっては、Graphics メソッドによって描画された
テキストやグラフィックスが正しく印刷されないことがあります。
その場合は、互換性のある印刷メソッド
PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.CompatibleModeClientAreaOnly)
を使用してください。       (又は、 CompatibleModeFullWindow)

と言った記事がありましたので、一度試して見て下さい。

私の環境(Vista)では、中抜けで印刷(NG)されました。

[ツリー表示へ]
タイトルRe^3: DataGridViewを含むFormを印刷したい
記事No7730
投稿日: 2008/06/24(Tue) 19:15
投稿者皐月
こんばんは、書き込みが遅くなってしまい申し訳ありません。
花ちゃんさん丁寧なお返事ありがとうございます。

書き込んでいただいたすべての方法を試してみたところ、どれも正常にDataGridViewが印刷されました。

>オペレーティング システムによっては、Graphics メソッドによって描画された
>テキストやグラフィックスが正しく印刷されないことがあります。

とのことでしたので、

PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.CompatibleModeFullWindow)

を使用することにしました。
キーワードをヒントにMSDNのページを発見いたしました、以下参照URLです。
http://msdn.microsoft.com/ja-jp/library/bb629243.aspx

どうして、DataGridViewだけ印刷できないのか不思議だったのですが、クライアント領域扱いだったからなのですね。
おかげさまで解決いたしました。ありがとうございます。

[ツリー表示へ]