Вывести значение на новую страницу VB.net vs2012? - PullRequest
0 голосов
/ 12 мая 2018

Я хочу напечатать значение переменной на следующей странице (новая страница). Вот мой код

Imports System.Drawing.Printing
Public Class Form1
    Dim ppd As New PrintPreviewDialog


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim custom As New PaperSize("custom", 800, 800)
        ppd.Document = PrintDocument1
        PrintDocument1.DefaultPageSettings.PaperSize = custom
        ppd.ShowDialog()
    End Sub

    Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim var_name_s, var_idx_s, var_val_s As String
        Dim var_name, var_idx, var_val, row_idx As Integer
        Dim col1 As Integer = 20
        Dim col2 As Integer = 40
        Dim row1 As Integer = 10
        Static start_var_val As Integer = 1

        For var_name = 1 To 2
            If var_name = 1 Then
                var_name_s = "X"
            Else
                var_name_s = "Y"
            End If

            For var_idx = 1 To 2
                var_idx_s = var_idx.ToString
                e.Graphics.DrawString(var_name_s, New Drawing.Font("Times New Roman", 15), Brushes.Black, col1, row1)
                e.Graphics.DrawString(var_idx_s, New Drawing.Font("Times New Roman", 15), Brushes.Black, col2, row1)
                row_idx += 1
                For var_val = start_var_val To 7
                    var_val_s = var_val.ToString
                    row1 += 20
                    If var_name = 2 Then
                        e.HasMorePages = True
                        row_idx = 0
                    End If
                    If row_idx = 6 Then
                        e.HasMorePages = True
                        start_var_val = var_val + 1
                        row_idx = 0
                        Return
                    End If
                    e.Graphics.DrawString(var_val_s, New Drawing.Font("Times New Roman", 15), Brushes.Black, col1, row1)
                    row_idx += 1

                Next var_val
                row1 += 20
            Next var_idx
        Next var_name

    End Sub
End Class

условие

  1. если на странице 6 строк, то следующая строка печатается на следующей странице
  2. если имя var_name изменилось, тогда имя var_name и значение var_name будут напечатаны на следующей странице

но результат просто никогда не прекращает печатать новую страницу и результат, подобный этому

'page1
x1
1
2
3
4
5
-------
'other page
x1
7
x2
7
y1
7
y2
7

я хочу вот так

'page1
x1
1
2
3
4
5
---------
'page 2
6
7
x2
1
2
3
---------
'page 3
4
5
6
7


---------
'page 4
y1 'var_name changed
1
2
3
4
5
---------
'page 5
6
7
y2
1
2
3
---------
'page 6
4
5
6
7

---------

может кто-нибудь мне помочь? Спасибо

1 Ответ

0 голосов
/ 13 мая 2018

Когда вы устанавливаете e.HasMorePages в true. событие PrintPage сработает снова. Вы должны отслеживать текущую страницу в классе и печатать только ту информацию, которая вам нужна для этой страницы, каждый раз, когда возникает событие. Вот более короткая версия:

Public Class Form1
    Private ppd As New PrintPreviewDialog
    Private curPage As Integer

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim custom As New PaperSize("custom", 800, 800)
        ppd.Document = PrintDocument1
        PrintDocument1.DefaultPageSettings.PaperSize = custom
        curPage = 1
        ppd.ShowDialog()
    End Sub

    Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Select Case curPage
            Case 1
                'Print just page 1
            Case 2
                'Print just page 2
            Case 3
                '...
            Case 4

            Case 5

            Case 6

            Case 7

        End Select
        If curPage <> 7 Then e.HasMorePages = True
        curPage += 1      
    End Sub
End Class

В качестве альтернативы, более часто иметь набор данных для работы, чем знать, сколько страниц вам нужно. В этой ситуации вам также может понадобиться отследить, как далеко вы печатаете страницу, а затем запомнить конечную позицию или состояние набора данных между событиями.

...