如何在Visual Basic中使用多个Windows窗体进行多页双面打印?

卢克·博格曼

我试图找到一种方法来打印多个Windows窗体作为报告。我有多种计算客户退休福利的表格,我正在尝试打印这些表格,以便我们的客户获得讲义。此时,我在每个表单上都有一个PrintDocument组件,并且可以将每个表单作为不同的文档打印在单独的页面上,但是我要实现的目标是使用1个单个PrintButton在1个PrintDocument文档中双面打印所有这些表单。还有另一种形式。

举个例子。我有2个Windows窗体(窗体AOW和窗体Basisinfo),每个都有一个PrintDocument组件。我已经按照在PrintDocument1_PrintPage子目录中正确位置的方式绘制了文本,图像,图表等。我想在名为CloseReport的第三种表格上打印表格AOW和Basisinfo。

我已经拥有的代码无法给我提供双面打印:

基本信息:

Public Class Basisinfo


Private Sub Button2_Click(sender As Object, e As EventArgs) Handles ButtonPrinten.Click

    For teller = 1 To 30
        If inhoudlijst(teller, 0) = "" Then
            inhoudlijst(teller, 0) = "Basisinfo"
            inhoudlijst(teller, 1) = "True"
            PrintDocument1.DefaultPageSettings.Landscape = True
            PrintDocument1.DefaultPageSettings.PrinterSettings.Duplex = Printing.Duplex.Default
            printarray3(teller) = PrintDocument1
            Exit For
        End If
    Next
End Sub


Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

    Dim stringFormatCenter As New StringFormat()
    stringFormatCenter.Alignment = StringAlignment.Center
    stringFormatCenter.LineAlignment = StringAlignment.Center

    Dim stringFormatFar As New StringFormat()
    stringFormatFar.Alignment = StringAlignment.Far
    stringFormatFar.LineAlignment = StringAlignment.Center

    Dim stringFormatNear As New StringFormat()
    stringFormatNear.Alignment = StringAlignment.Near
    stringFormatNear.LineAlignment = StringAlignment.Center


    'Alle TextBoxes met witte achtergrond
    For Each TextBox In {TextBox17, TextBox18, TextBox35, TextBox1, TextBox29, TextBox2, TextBox3, TextBox4, TextBox12, TextBox13, TextBox10, TextBox9, TextBox26, TextBox8, TextBox7, TextBox16, TextBox21, TextBox14, TextBox28, TextBox27, TextBox6, TextBox23, TextBox19, TextBox31, TextBox24, TextBox25, TextBox30, TextBox15, TextBox34, TextBox22, TextBox20, TextBox33, TextBox32}
        e.Graphics.DrawRectangle(Pens.Black, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height))
        e.Graphics.FillRectangle(Brushes.White, TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height)
    Next

    'Alle TextbBoxes met gele achtergrond
    For Each TextBox In {TextBox17, TextBox18, TextBox35, TextBox1, TextBox29}
        e.Graphics.FillRectangle(Brushes.LightYellow, TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height)
    Next


    'Textboxes Centered
    For Each TextBox In {TextBox17, TextBox18, TextBox35, TextBox1, TextBox29}
        e.Graphics.DrawString(TextBox.Text, TextBox.Font, Brushes.Blue, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height), stringFormatCenter)
    Next

    'Textboxes Near
    For Each TextBox In {TextBox2, TextBox3, TextBox4, TextBox12, TextBox13, TextBox10, TextBox9, TextBox26, TextBox8, TextBox7, TextBox16, TextBox21, TextBox14, TextBox28, TextBox27, TextBox6, TextBox23, TextBox19, TextBox31, TextBox24, TextBox25, TextBox30, TextBox15, TextBox34, TextBox22, TextBox20, TextBox33, TextBox32}
        e.Graphics.DrawString(TextBox.Text, TextBox.Font, Brushes.Blue, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width + 20, TextBox.Height), stringFormatNear)
    Next


    'Textboxes Far
    For Each TextBox In {}
        e.Graphics.DrawString(TextBox.Text, TextBox.Font, Brushes.Blue, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height), stringFormatFar)
    Next



    For Each c As Control In Me.Controls
        If c.GetType Is GetType(Label) Then
            e.Graphics.DrawString(c.Text, c.Font, Brushes.Black, c.Left, c.Top)
        End If
    Next
End Sub

AOW:

Public Class AOW

Sub ButtonPrinten_Click(sender As Object, e As EventArgs) Handles ButtonPrinten.Click

    For teller = 1 To 30
        If inhoudlijst(teller, 0) = "" Then
            inhoudlijst(teller, 0) = "AOW"
            inhoudlijst(teller, 1) = "True"
            PrintDocument1.DefaultPageSettings.Landscape = True
            PrintDocument1.DefaultPageSettings.PrinterSettings.Duplex = Printing.Duplex.Default
            printarray3(teller) = PrintDocument1
            'printvlag_basisinfo = True
            Exit For
        End If
    Next

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

    Dim stringFormatCenter As New StringFormat()
    stringFormatCenter.Alignment = StringAlignment.Center
    stringFormatCenter.LineAlignment = StringAlignment.Center

    Dim stringFormatFar As New StringFormat()
    stringFormatFar.Alignment = StringAlignment.Far
    stringFormatFar.LineAlignment = StringAlignment.Center

    Dim stringFormatNear As New StringFormat()
    stringFormatNear.Alignment = StringAlignment.Near
    stringFormatNear.LineAlignment = StringAlignment.Center

    'Alle TextBoxes met witte achtergrond
    For Each TextBox In {Koptextbox, TextBox99, TextBox19, TextBox21, TextBox11, TextBox12, TextBox14, TextBox13, TextBox17, TextBox15, TextBox16, TextBox18}
        e.Graphics.DrawRectangle(Pens.Black, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height))
        e.Graphics.FillRectangle(Brushes.White, TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height)
    Next

    'Alle TextbBoxes met gele achtergrond
    For Each TextBox In {Koptextbox, TextBox99, TextBox19, TextBox21, TextBox13, TextBox17, TextBox18, TextBox16}
        e.Graphics.FillRectangle(Brushes.LightYellow, TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height)
    Next

    'Textboxes Centered
    For Each TextBox In {Koptextbox, TextBox99, TextBox21, TextBox19, TextBox14, TextBox13, TextBox17, TextBox15, TextBox16, TextBox18}
        e.Graphics.DrawString(TextBox.Text, TextBox.Font, Brushes.Blue, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height), stringFormatCenter)
    Next

    'Textboxes Near
    For Each TextBox In {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox24, TextBox23, TextBox22}
        e.Graphics.DrawString(TextBox.Text, TextBox.Font, Brushes.Blue, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width + 20, TextBox.Height), stringFormatNear)
    Next


    'Textboxes Far
    For Each TextBox In {TextBox12}
        e.Graphics.DrawString(TextBox.Text, TextBox.Font, Brushes.Blue, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height), stringFormatFar)
    Next

    For Each c As Control In Me.Controls
        If c.GetType Is GetType(Label) Then
            e.Graphics.DrawString(c.Text, c.Font, Brushes.Black, c.Left, c.Top)
        End If
    Next

End Sub
End Class

结束报告:

Public Class CloseReport


Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    PrintDocument1.DefaultPageSettings.Landscape = True
    PrintDialog1.Document = PrintDocument1
    If PrintDialog1.ShowDialog() = DialogResult.OK Then
        For teller = 1 To 30
            If IsNothing(printarray3(teller)) = False Then
                printen6(printarray3(teller))
            End If
        Next teller
    End If
End Sub
End Class

如果您想知道printen6函数的作用:

    PrintDocument.PrinterSettings.DefaultPageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High
    PrintDocument.PrinterSettings.DefaultPageSettings.Landscape = True
    PrintDocument.PrinterSettings.DefaultPageSettings.Margins = New Printing.Margins(0, 0, 0, 0)

    PrintDocument.DefaultPageSettings.PrinterSettings.Duplex = Printing.Duplex.Default


    PrintDocument.Print()

我在考虑如何合并PrintDocument文件以便可以进行双面打印,或者在考虑如何使用HasMorePages创建多个页面。我已经在网络上阅读了很多有关HasMorePages的内容,但是仅提供了带有加载的文本文件的代码。

希望您能为我提供帮助,因为我真的很坚持。提前致谢!

卢克·博格曼

对于那些对答案感兴趣的人:它是e.HasMorePages = True。。但是唯一缺少的是(公共)“ PageNumber”计数器,这使得可以在案例之间进行选择。对于e.HasMorePages到达Sub的末尾很重要否则它将无效。请参见下面的代码。

Public Class Inhoudsopgave
Dim PageNumber As Integer = 0
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

    PrintDocument1.DefaultPageSettings.Margins = New Printing.Margins(0, 0, 0, 0)
    PrintDocument1.DefaultPageSettings.Landscape = True
    PrintDialog1.Document = PrintDocument1 'PrintDialog associate with PrintDocument.
    If PrintDialog1.ShowDialog() = DialogResult.OK Then
        PrintDocument1.Print()
    End If
End Sub

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

    PrintDocument1.DefaultPageSettings.Margins = New Printing.Margins(0, 0, 0, 0)

    Select Case PageNumber
        Case 0
            For Each c As Control In Me.Controls
                If c.GetType Is GetType(Label) Then
                    e.Graphics.DrawString(c.Text, c.Font, Brushes.Black, c.Left, c.Top)
                End If
                e.HasMorePages = True
            Next
        Case 1
            'aow
            Dim stringFormatCenter As New StringFormat()
            stringFormatCenter.Alignment = StringAlignment.Center
            stringFormatCenter.LineAlignment = StringAlignment.Center

            Dim stringFormatFar As New StringFormat()
            stringFormatFar.Alignment = StringAlignment.Far
            stringFormatFar.LineAlignment = StringAlignment.Center

            Dim stringFormatNear As New StringFormat()
            stringFormatNear.Alignment = StringAlignment.Near
            stringFormatNear.LineAlignment = StringAlignment.Center


            'Doe dit voor iedere Groupbox en Chart
            Dim BMPGroupbox1 As Bitmap = New Bitmap(AOW.GroupBox1.Width, AOW.GroupBox1.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
            Dim BMPGroupbox2 As Bitmap = New Bitmap(AOW.GroupBox2.Width, AOW.GroupBox2.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
            Dim BMPGroupbox3 As Bitmap = New Bitmap(AOW.GroupBox3.Width, AOW.GroupBox3.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
            Dim BMPChart1 As Bitmap = New Bitmap(AOW.Chart1.Width, AOW.Chart1.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)

            'Doe dit voor iedere Groupbox en Chart
            AOW.GroupBox1.DrawToBitmap(BMPGroupbox1, New Rectangle(0, 0, AOW.GroupBox1.Width, AOW.GroupBox1.Height))
            AOW.GroupBox2.DrawToBitmap(BMPGroupbox2, New Rectangle(0, 0, AOW.GroupBox2.Width, AOW.GroupBox2.Height))
            AOW.GroupBox3.DrawToBitmap(BMPGroupbox3, New Rectangle(0, 0, AOW.GroupBox3.Width, AOW.GroupBox3.Height))
            AOW.Chart1.DrawToBitmap(BMPChart1, New Rectangle(0, 0, AOW.Chart1.Width, AOW.Chart1.Height))

            'Doe dit voor iedere Groupbox en Chart
            e.Graphics.DrawImage(BMPGroupbox1, AOW.GroupBox1.Left, AOW.GroupBox1.Top, AOW.GroupBox1.Width, AOW.GroupBox1.Height)
            e.Graphics.DrawImage(BMPGroupbox2, AOW.GroupBox2.Left, AOW.GroupBox2.Top, AOW.GroupBox2.Width, AOW.GroupBox2.Height)
            e.Graphics.DrawImage(BMPGroupbox3, AOW.GroupBox3.Left, AOW.GroupBox3.Top, AOW.GroupBox3.Width, AOW.GroupBox3.Height)
            e.Graphics.DrawImage(BMPChart1, AOW.Chart1.Left, AOW.Chart1.Top, AOW.Chart1.Width, AOW.Chart1.Height)

            'Alle TextBoxes met witte achtergrond
            For Each TextBox In {AOW.Koptextbox, AOW.TextBox99, AOW.TextBox19, AOW.TextBox21, AOW.TextBox11, AOW.TextBox12, AOW.TextBox14, AOW.TextBox13, AOW.TextBox17, AOW.TextBox15, AOW.TextBox16, AOW.TextBox18}
                e.Graphics.DrawRectangle(Pens.Black, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height))
                e.Graphics.FillRectangle(Brushes.White, TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height)
            Next

            'Alle TextbBoxes met gele achtergrond
            For Each TextBox In {AOW.Koptextbox, AOW.TextBox99, AOW.TextBox19, AOW.TextBox21, AOW.TextBox13, AOW.TextBox17, AOW.TextBox18, AOW.TextBox16}
                e.Graphics.FillRectangle(Brushes.LightYellow, TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height)
            Next

            'Textboxes Centered
            For Each TextBox In {AOW.Koptextbox, AOW.TextBox99, AOW.TextBox21, AOW.TextBox19, AOW.TextBox14, AOW.TextBox13, AOW.TextBox17, AOW.TextBox15, AOW.TextBox16, AOW.TextBox18}
                e.Graphics.DrawString(TextBox.Text, TextBox.Font, Brushes.Blue, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height), stringFormatCenter)
            Next

            'Textboxes Near
            For Each TextBox In {AOW.TextBox1, AOW.TextBox2, AOW.TextBox3, AOW.TextBox4, AOW.TextBox5, AOW.TextBox6, AOW.TextBox7, AOW.TextBox8, AOW.TextBox9, AOW.TextBox10, AOW.TextBox11, AOW.TextBox24, AOW.TextBox23, AOW.TextBox22}
                e.Graphics.DrawString(TextBox.Text, TextBox.Font, Brushes.Blue, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width + 20, TextBox.Height), stringFormatNear)
            Next

            'Textboxes Far
            For Each TextBox In {AOW.TextBox12}
                e.Graphics.DrawString(TextBox.Text, TextBox.Font, Brushes.Blue, New Rectangle(TextBox.Left, TextBox.Top, TextBox.Width, TextBox.Height), stringFormatFar)
            Next

            For Each c As Control In AOW.Controls
                If c.GetType Is GetType(Label) Then
                    e.Graphics.DrawString(c.Text, c.Font, Brushes.Black, c.Left, c.Top)
                End If
            Next

            e.HasMorePages = False
    End Select

    PageNumber += 1
End Sub
End Class

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Visual Basic中使用多个Windows窗体进行多页双面打印?

来自分类Dev

如何在Visual Studio中使用libpng?

来自分类Dev

如何在Visual Studio中使用IntelliCode?

来自分类Dev

如何在Visual Studio中使用PhoneGap

来自分类Dev

如何在Visual Studio中使用Startswith

来自分类Dev

如何在Visual Basic中使用ImageProcessor / DetectEdges?

来自分类Dev

如何在 Visual Basic 中使用 RegExp 中的 vbNewLine

来自分类Dev

如何在Visual Studio Code中使用Typescript进行TDD?

来自分类Dev

如何在 Visual Studio 2017 中关闭 Windows 窗体继承?

来自分类Dev

如何在 Visual Studio 2017 中使 != 变为 ==

来自分类Dev

如何在Visual Studio上进行协作

来自分类Dev

visual studio:如何在Visual Basic中读取设置

来自分类Dev

如何在Visual Basic Windows窗体中创建半透明效果?

来自分类Dev

如何在Visual Basic中打印N个素数

来自分类Dev

如何使用ipptool双面打印?

来自分类Dev

如何在Windows 8.1上打开多个Visual Studio窗口?

来自分类Dev

如何使用双面打印机打印双面纸?

来自分类Dev

如何在所有Windows窗体中使用变量?

来自分类Dev

如何在Visual Studio 2010中使用互斥锁

来自分类Dev

如何在Visual Studio(2012)中使用RedditSharp?

来自分类Dev

如何在Visual Studio的发布后事件中使用msbuild?

来自分类Dev

如何在C ++中使用julia语言(Visual Studio)

来自分类常见问题

如何在Visual Studio 2013中使用Sass

来自分类Dev

如何在Googlemaps中使用Visual Business GeoMap?

来自分类Dev

如何在Visual Studio中使用Bower(从nuget安装)?

来自分类Dev

如何在Visual Studio中使用LibTooling / Clang?

来自分类Dev

如何在NTVS中使用nodemon(Visual Studio的节点工具)

来自分类Dev

如何在Visual Studio(C#)中使用WebView功能

来自分类Dev

如何在Visual Studio Web表单中使用Google Maps?

Related 相关文章

  1. 1

    如何在Visual Basic中使用多个Windows窗体进行多页双面打印?

  2. 2

    如何在Visual Studio中使用libpng?

  3. 3

    如何在Visual Studio中使用IntelliCode?

  4. 4

    如何在Visual Studio中使用PhoneGap

  5. 5

    如何在Visual Studio中使用Startswith

  6. 6

    如何在Visual Basic中使用ImageProcessor / DetectEdges?

  7. 7

    如何在 Visual Basic 中使用 RegExp 中的 vbNewLine

  8. 8

    如何在Visual Studio Code中使用Typescript进行TDD?

  9. 9

    如何在 Visual Studio 2017 中关闭 Windows 窗体继承?

  10. 10

    如何在 Visual Studio 2017 中使 != 变为 ==

  11. 11

    如何在Visual Studio上进行协作

  12. 12

    visual studio:如何在Visual Basic中读取设置

  13. 13

    如何在Visual Basic Windows窗体中创建半透明效果?

  14. 14

    如何在Visual Basic中打印N个素数

  15. 15

    如何使用ipptool双面打印?

  16. 16

    如何在Windows 8.1上打开多个Visual Studio窗口?

  17. 17

    如何使用双面打印机打印双面纸?

  18. 18

    如何在所有Windows窗体中使用变量?

  19. 19

    如何在Visual Studio 2010中使用互斥锁

  20. 20

    如何在Visual Studio(2012)中使用RedditSharp?

  21. 21

    如何在Visual Studio的发布后事件中使用msbuild?

  22. 22

    如何在C ++中使用julia语言(Visual Studio)

  23. 23

    如何在Visual Studio 2013中使用Sass

  24. 24

    如何在Googlemaps中使用Visual Business GeoMap?

  25. 25

    如何在Visual Studio中使用Bower(从nuget安装)?

  26. 26

    如何在Visual Studio中使用LibTooling / Clang?

  27. 27

    如何在NTVS中使用nodemon(Visual Studio的节点工具)

  28. 28

    如何在Visual Studio(C#)中使用WebView功能

  29. 29

    如何在Visual Studio Web表单中使用Google Maps?

热门标签

归档