tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: PrintPreviewDialogでの印刷ボタン
投稿日: 2008/02/13(Wed) 10:02
投稿者ひでと
遅くなりまして申し訳ありません。
> PrintDocument1_PrintPageの中に記載されたコードが怪しいわけですね。
> 現状のコードを簡略化して、サンプルをつくってみます。

すいません。簡略化したコードを作成中に駄目なところがわかりました。
誤解していたのは、プレビューダイアログの「印刷」ボタンが、
ダイアログに取り込まれたデータを印刷するのではないかと思っていたところでした。
実際は「印刷」ボタンは PrintDocument1.Printを呼び出すだけなのですね。
したがって ページの初期化の処理はPrintDocument_PrintPage内でどうしても
完了させないといけないと言う事が、ようやく理解できました。
ご迷惑をおかけしました。

以下に修正した簡略化コードをいれます。
フォームにDataGridを置いてあり、その内容を印刷しようとしています。
Public Class Form1
    Dim BgnRow As Integer
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim i As Integer
        With DataGridView1
            .ColumnCount = 1
            For i = 0 To 50
                .Rows.Add() : DataGridView1(0, i).Value = "test" & i + 1
            Next
        End With
        With PrintDocument1.DefaultPageSettings.Margins '1mm=39.37*0.01in
            .Left = 20 * 39.37 / 10 '左端を20mmに設定
            .Right = 10 * 39.37 / 10
            .Top = 10 * 39.37 / 10
            .Bottom = 200 * 39.37 / 10 '印刷域を小さく設定
        End With
    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim left, top, width, height
        Dim i As Integer
        Dim x, y As Integer
        Dim dy As Integer
        Dim Maxdy As Integer
        Dim 出力文字 As String
        Dim Obj As DataGridView
        Dim nFont
        nFont = New Font("MS 明朝", 10)
        Obj = DataGridView1
        Left = e.MarginBounds.Left
        Top = e.MarginBounds.Top
        Width = e.MarginBounds.Width
        Height = e.MarginBounds.Height
        y = y + Maxdy

        For i = BgnRow To Obj.Rows.Count - 2
            出力文字 = Obj(0, i).Value.ToString
            dy = 0
            e.Graphics.DrawString(出力文字, nFont, Brushes.Black, left + x, top + y + dy)
            dy = e.Graphics.MeasureString(出力文字, nFont).Height
            If Maxdy < dy Then Maxdy = dy
            If y > height Then
                e.HasMorePages = True
                BgnRow = i + 1
                Exit Sub
            End If
            y = y + Maxdy
        Next
    'ページの初期化はここで絶対必要
        BgnRow = 0
        e.HasMorePages = False
    End Sub

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        BgnRow = 0
        PrintDocument1.Print()
    End Sub

    Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
        BgnRow = 0
        PrintPreviewDialog1.Document = PrintDocument1
        PrintPreviewDialog1.ShowDialog()
    End Sub
End Class

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。