タイトル : Re^2: 自己レスです 投稿日 : 2009/01/13(Tue) 09:59 投稿者 : ひでと
複数ページ印刷テスト用の処理をつくりました。 ここの処理でもう1週間程悩んでいます。紙も100枚ちかく・・・。 なにとぞ、ご助言をお願いします。 Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load With Me.PrintDocument1.DefaultPageSettings.Margins .Left = 80 .Right = 40 .Top = 40 .Bottom = 40 End With End Sub Dim Max As Integer Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _ Button1.Click Me.PrintPreviewDialog1.Document = Me.PrintDocument1 Me.PrintPreviewDialog1.ShowDialog() End Sub Dim PrintAction As System.Drawing.Printing.PrintAction Private Sub PrintDocument1_BeginPrint _ (ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) _ Handles PrintDocument1.BeginPrint PrintAction = e.PrintAction Max = 3 End Sub Private Sub PrintDocument1_PrintPage _ (ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) _ Handles PrintDocument1.PrintPage Dim X As Integer = e.MarginBounds.X Dim Y As Integer = e.MarginBounds.Y Dim Width As Integer = e.MarginBounds.Width Dim Height As Integer = e.MarginBounds.Height e.Graphics.DrawRectangle(Pens.Black, e.MarginBounds) e.Graphics.DrawLine(Pens.Black, X, Y, X + Width, Y + Height) e.Graphics.DrawLine(Pens.Black, X + Width, Y, X, Y + Height) Max = Max - 1 If Max > 0 Then e.HasMorePages = True Else e.HasMorePages = False End If End Sub Private Sub PrintDocument1_QueryPageSettings _ (ByVal sender As Object, ByVal e As System.Drawing.Printing.QueryPageSettingsEventArgs) _ Handles PrintDocument1.QueryPageSettings 'e.PageSettings.Margins をDefaultに戻そうとしてもうまくいかない? e.PageSettings.Margins = Me.PrintDocument1.DefaultPageSettings.Margins With e.PageSettings Select Case PrintAction Case Printing.PrintAction.PrintToFile If .HardMarginX < .Margins.Left Then Else .Margins.Left = .HardMarginX End If If .HardMarginX < .Margins.Right Then Else .Margins.Right = .HardMarginX End If If .HardMarginY < .Margins.Top Then Else .Margins.Top = .HardMarginY End If If .HardMarginY < .Margins.Bottom Then Else .Margins.Bottom = .HardMarginY End If Case Printing.PrintAction.PrintToPreview If .HardMarginX < .Margins.Left Then Else .Margins.Left = .HardMarginX End If If .HardMarginX < .Margins.Right Then Else .Margins.Right = .HardMarginX End If If .HardMarginY < .Margins.Top Then Else .Margins.Top = .HardMarginY End If If .HardMarginY < .Margins.Bottom Then Else .Margins.Bottom = .HardMarginY End If Case Printing.PrintAction.PrintToPrinter If .HardMarginX < .Margins.Left Then .Margins.Left = .Margins.Left - .HardMarginX Else .Margins.Left = 1 * 39.37 / 10 End If If .HardMarginX < .Margins.Right Then .Margins.Right = .Margins.Right + .HardMarginX Else .Margins.Right = .HardMarginX * 2 + 1 * 39.37 / 10 End If If .HardMarginY < .Margins.Top Then .Margins.Top = .Margins.Top - .HardMarginY Else .Margins.Top = 1 * 39.37 / 10 End If If .HardMarginY < .Margins.Bottom Then .Margins.Bottom = .Margins.Bottom + .HardMarginY Else .Margins.Bottom = .HardMarginY * 2 + 1 * 39.37 / 10 End If End Select End With End Sub End Class |