I have a windowsform, on that form I have put a panel.
on this panel I have some labels and textboxes and a tabellayoutpanel.
i use this code to print:
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Static page As Integer = 1
Dim startPosition As Integer = (page - 1) * PrintDocument1.DefaultPageSettings.Bounds.Height
Static maxPages As Integer = 0
If page = 1 Then
For Each ctrl As Control In Me.Panel1.Controls
If TypeOf ctrl Is TextBox Or TypeOf ctrl Is Label Or TypeOf ctrl Is RichTextBox Or TypeOf ctrl Is CheckBox Or TypeOf ctrl Is TableLayoutPanel Then
ctrl.Tag = Int((ctrl.Top + ctrl.Height) / PrintDocument1.DefaultPageSettings.Bounds.Height) + 1
If CInt(ctrl.Tag) > maxPages Then maxPages = CInt(ctrl.Tag)
End If
Next
End If
For Each ctrl As Control In Me.Panel1.Controls
If val(ctrl.Tag) = page Then
Dim sf As New System.Drawing.StringFormat
If TypeOf ctrl Is TextBox Then
If DirectCast(ctrl, TextBox).TextAlign = HorizontalAlignment.Right Then
sf.Alignment = StringAlignment.Far
Else
sf.Alignment = StringAlignment.Near
End If
ElseIf TypeOf ctrl Is Label Then
If DirectCast(ctrl, Label).TextAlign = ContentAlignment.TopLeft Then
sf.Alignment = StringAlignment.Near
ElseIf DirectCast(ctrl, Label).TextAlign = ContentAlignment.TopRight Then
sf.Alignment = StringAlignment.Far
End If
ElseIf TypeOf ctrl Is RichTextBox Then
If DirectCast(ctrl, RichTextBox).SelectionAlignment = HorizontalAlignment.Right Then
sf.Alignment = StringAlignment.Far
Else
sf.Alignment = StringAlignment.Near
End If
'*********************************************************************************
ElseIf TypeOf ctrl Is TableLayoutPanel Then
If DirectCast(ctrl, TableLayoutPanel).Visible = True Then
sf.Alignment = StringAlignment.Far
Else
sf.Alignment = StringAlignment.Near
'************************************************************************************
End If
ElseIf TypeOf ctrl Is CheckBox Then
If DirectCast(ctrl, CheckBox).TextAlign = ContentAlignment.TopLeft Then
sf.Alignment = StringAlignment.Near
ElseIf DirectCast(ctrl, CheckBox).TextAlign = ContentAlignment.TopRight Then
sf.Alignment = StringAlignment.Far
End If
End If
sf.FormatFlags = StringFormatFlags.NoClip
e.Graphics.DrawString(ctrl.Text, ctrl.Font, New SolidBrush(ctrl.ForeColor), New RectangleF(ctrl.Left, ctrl.Top - startPosition, ctrl.Width + 50, ctrl.Height), sf)
End If
Next
page += 1
If page > maxPages Then
e.HasMorePages = False
page = 1
maxpages = 0
Else
e.HasMorePages = True
End If
End Sub
But it does not print out my TableLayoutPanel.
Can anybody help me on my way here?