2014-11-22 26 views
1

我需要從數據庫打印一些表格數據,我決定先將這些數據填充到一個臨時的TableLayoutPanel中,以便它能夠爲我處理可變長度。然後,它被吸引到一個PrintDocument的如下: 如何在繪製之前獲取TableLayoutPanel的大小?

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 

但是,只有在調整細胞的情況下返回正確的尺寸,由於長期內容,不發生。在繪製之前是否有其他方法可以獲得控件的大小?

回答

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將返回正確的大小!這有點哈克,但爲我工作。

邊注:爲了使表都自動調整大小的高度和適合紙張寬度,請執行下列操作

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

是的,處理SizeChanged事件並保持更新大小的類級變量。然後當你畫畫的時候,你會知道你想要畫的控件的大小。

+0

試用了一下,SizeChanged將不會發生在所有... – jack3694078 2014-11-24 02:17:31

+0

是否'SizeChanged'事件發生在它的任何祖先(容器)?你可能也想看看'Control.WndProc'方法。 – toddmo 2014-11-25 03:27:30

相關問題