I have looked on the web for a solution to print scrollable panel larger than can be fitted on the screen but couldn't find any solution and it looks like that many people has this problem!
PrintForm (printform powerpack component) can not do this because it only capture that part of the panel that is fitted on the screen.
And if you want to do this with the PrintDocument component and print all the visible parts of the form grids,tablelayoutpanels etc and to formate it correctly then you can become really frustrated!
Here is my solution to print scrollable panels larger than can be fitted on the screen..
Declare Auto Function SendMessage Lib "user32" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As Integer) As Integer
Private Enum EDrawingOptions As Integer
PRF_CHECKVISIBLE = &H1
PRF_NONCLIENT = &H2
PRF_CLIENT = &H4
PRF_ERASEBKGND = &H8
PRF_CHILDREN = &H10
PRF_OWNED = &H20
End Enum
Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Const WM_PRINT As Integer = &H317
Dim myBmp As Bitmap
Dim myGraphics As Graphics
Dim hdc As System.IntPtr
Dim g As Graphics
g = e.Graphics
myBmp = New Bitmap(Panel1.DisplayRectangle.Width, Panel1.DisplayRectangle.Height)
myGraphics = Graphics.FromImage(myBmp)
hdc = myGraphics.GetHdc
Call SendMessage(Panel1.Handle, WM_PRINT, hdc, EDrawingOptions.PRF_CHILDREN Or EDrawingOptions.PRF_CLIENT Or EDrawingOptions.PRF_NONCLIENT Or EDrawingOptions.PRF_OWNED)
myGraphics.ReleaseHdc(hdc)
g.DrawImage(myBmp, 0, 0)
g.Dispose()
e.HasMorePages = False
myGraphics.Dispose()
myGraphics = Nothing
myBmp = Nothing
End Sub
Private Sub SkrivUt1ExToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SkrivUt1ExToolStripMenuItem.Click
PrintDocument1.Print()
End Sub