Vb.net Tablelayoutpanel要打印的面板内的位置

Vb.net Tablelayoutpanel要打印的面板内的位置,vb.net,winforms,printing,tablelayoutpanel,Vb.net,Winforms,Printing,Tablelayoutpanel,我正在尝试使用printdocument打印面板中的tablelayoutpanel。 但是当我预览打印时,tablelayoutpanel被放置在左上角。 我想把它放在我放在面板上的地方。 面板上的标签保持在该位置,但tablelayoutpanel没有 这是我正在使用的代码: Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocumen

我正在尝试使用printdocument打印面板中的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
,但您可以通过它相对于
面板进行打印。例如,如果
表格布局面板
位于
面板
内的(50,50)处,而
标签
位于其内的(10,10),则
标签
相对于
面板
将位于(60,60)处,因此您需要在此处打印它。最简单的选择可能是将每个控件的
位置
转换为屏幕坐标,然后将其转换为
面板的客户坐标

面板中的每个ctrl As控件的
。控件
e、 Graphics.DrawString(ctrl.Text、ctrl.Font、blackBrush、ctrl.Bounds.Location)
下一个
对于Tablelayoutpanel.Controls中的每个ctrl-As控件
e、 Graphics.DrawString(ctrl.Text,
ctrl.Font,
黑灌木,
Panel.PointToClient(Tablelayoutpanel.PointToScreen(ctrl.Bounds.Location)))
下一个

不要使用
Dim blackstrush作为画笔=新的SolidBrush(Color.Black)
。如果要创建自己的
SolidBrush
,则应使用
Using
语句来创建,以便在块的末尾处理它。只有在必要时才能创建自己的画笔。如果可以,请使用系统创建的笔刷:
e.Graphics.DrawString(ctrl.Text、ctrl.Font、bruss.Black、ctrl.Bounds.Location)
。非常感谢!代码运行得很好,但是,如果我有一个包含3列的TableLayoutPanel,前2列使用TableLayoutPanel.Controls.Add左对齐,第3列使用TableLayoutPanel.Controls.Add右对齐(New Label()和{.Text=“Text”,.TextAlign=ContentAlignment.MiddleRight},2,1)。所有内容仍以左对齐方式打印。为什么?@Desz,不要在对已接受答案的评论中提出新问题。如果你有一个新问题,发布一个新问题,以及与该问题相关的所有信息。记住,你需要先尝试一些东西。在您的代码中,您在哪里对打印文本进行右对齐?没有。先研究一下如何做到这一点,你说得对!这不会再发生了。我发了一个新问题,也许你可以看看,谢谢!