タイトル | : Re^3: PrintPreviewDialogでの印刷ボタン |
記事No | : 7010 |
投稿日 | : 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
|