要打印的面板内的 Tablelayoutpanel 位置

Tablelayoutpanel location inside panel to print

我正在尝试使用 printdocument 打印 Panel 内的 tablelayoutpanel。 但是当我预览打印时,tablelayoutpanel 位于左上角。 我想把它放在面板上的位置。 面板上的标签保持在那里的位置,但 tablelayoutpanel 不是。

这是我正在使用的代码:

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim blackBrush As Brush = New SolidBrush(Color.Black)

For Each ctrl As Control In Panel.Controls
e.Graphics.DrawString(ctrl.Text, ctrl.Font, blackBrush, ctrl.Bounds.Location)
Next

For Each ctrl As Control In Tablelayoutpanel.Controls
e.Graphics.DrawString(ctrl.Text, ctrl.Font, blackBrush, ctrl.Bounds.Location)
Next

End Sub

TableLayoutPanel 中每个子控件的 Location 属性 是相对于 TableLayoutPanel 的,但是你打印的是相对于 [=14] =].例如,如果 TableLayoutPanel 位于 Panel 内的 (50,50),而 Label 位于其中的 (10,10),则 Label 将是在 (60,60) 相对于 Panel,所以这就是你需要打印它的地方。最简单的选择可能是将每个控件的 Location 转换为屏幕坐标,然后将其转换为 Panel:

的客户端坐标
For Each ctrl As Control In Panel.Controls
    e.Graphics.DrawString(ctrl.Text, ctrl.Font, blackBrush, ctrl.Bounds.Location)
Next

For Each ctrl As Control In Tablelayoutpanel.Controls
    e.Graphics.DrawString(ctrl.Text,
                          ctrl.Font,
                          blackBrush,
                          Panel.PointToClient(Tablelayoutpanel.PointToScreen(ctrl.Bounds.Location)))
Next