如何在绘制之前获取TableLayoutPanel的大小?

时间:2014-11-22 04:42:42

标签: .net vb.net winforms tablelayoutpanel

我需要从数据库中打印一些表格数据,我决定先将它们填入临时的TableLayoutPanel,以便它为我处理变量长度。然后将其绘制为PrintDocument,如下所示:

Using printImage As New Bitmap(Table.Width, Table.Height) 'Need to know size here

   Table.DrawToBitmap(printImage, new Rectangle(0, 0, _
   printImage.Width,printImage.Height));                  'But draw is here!
   e.Graphics.DrawImage(printImage, New Point(0, PrintPos))   

End Using

请注意,在实际绘制控件之前声明图像的大小。这不起作用,因为tableLayoutPanel的大小调整只发生在绘图上(我猜是这样)!只有部分表格在打印预览中绘制。

我尝试手动设置大小,如下所示:

Table.Autosize = False
Table.Size = Table.PreferredSize 

但是,只有在由于内容较长而不会发生细胞大小调整的情况下才会返回正确的大小。在绘制控件之前是否有其他方法可以获得控件的大小?

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题!在设置所有数据,行/列样式等后运行以下代码:

Table.AutoSize = True
Using pan As New Panel
    pan.Controls.Add(Table)    'Add the table to a temp Panel,
    pan.Controls.Remove(Table) 'to force resize
End Using

Table.Size将返回正确的大小!这有点hacky但对我有用。

备注:要制作一张既可以自动调整高度又适合纸张宽度的表格,请执行以下操作

Table.MaximumSize = New Size(PaperWidth, 0) 'Set maximum width only

答案 1 :(得分:0)

是的,处理SizeChanged事件并使用大小更新类级别变量。然后在绘制时,您将知道要绘制的控件的大小。