要打印的面板内的 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
我正在尝试使用 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