954,551 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Printing of a Form in VB.NET?

Suppose one has an open VB.NET form on the screen. How can one have that form printed?

Omnibus
Newbie Poster
1 post since Jul 2004
Reputation Points: 10
Solved Threads: 0
 

Hi here is the Solution:

Imports System.Runtime.InteropServices
.....
.....
' Global Variables
Dim img As Bitmap
Dim WithEvents pd As PrintDocument

'Returns the Form as a bitmap
Function CaptureForm1() As Bitmap

Dim g1 As Graphics = Me.CreateGraphics()
Dim MyImage = New Bitmap(Me.ClientRectangle.Width, (Me.ClientRectangle.Height ), g1)
Dim g2 As Graphics = Graphics.FromImage(MyImage)
Dim dc1 As IntPtr = g1.GetHdc()
Dim dc2 As IntPtr = g2.GetHdc()
BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, (Me.ClientRectangle.Height ), dc1, 0, 0, 13369376)
g1.ReleaseHdc(dc1)
g2.ReleaseHdc(dc2)
'saves image to c drive just, u can comment it also
MyImage.Save("c:\abc.bmp")
Return MyImage
End Function

_
Private Shared Function BitBlt(ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As System.Int32) As Boolean

' Leave function empty - DLLImport attribute forwards calls to MoveFile to
' MoveFileW in KERNEL32.DLL.
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

img = CaptureForm1()
pd = New PrintDocument
pd.Print()

End Sub
'this method will be called each time when pd.printpage event occurs
Sub pd_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles pd.PrintPage

Dim x As Integer = e.MarginBounds.X
Dim y As Integer = e.MarginBounds.Y
e.Graphics.DrawImage(img, x, y)
e.HasMorePages = False

End Sub

sabdulhaq
Newbie Poster
1 post since May 2005
Reputation Points: 10
Solved Threads: 0
 

What if the form you have is a vertically scrollable form.

How would you print the hidden area of the form (the area you have to get to by scrolling down)..

The above method only prints the front first screen of the form.

sm43
Newbie Poster
2 posts since Aug 2003
Reputation Points: 10
Solved Threads: 0
 

Exactly it needs to print the data which is binded into the datagrid instead of creating it an image and printing it.

Have you tried Form1.Printform?

jaytheguru
Newbie Poster
18 posts since Aug 2007
Reputation Points: 10
Solved Threads: 0
 

it says that printdocument and PrintPageEventArgs are not defind
why ?

MREMREMRE1
Newbie Poster
1 post since May 2012
Reputation Points: 0
Solved Threads: 0
 

You will have to add them to your project.

Look in the toolbox when in design view, you will find PrintDocument under the printing tree.

or

Add it manually;

Imports System.Drawing.Printing
....
Dim pd As New PrintDocument
Begginnerdev
Posting Pro in Training
405 posts since Apr 2010
Reputation Points: 69
Solved Threads: 59
 

Post: Markdown Syntax: Formatting Help
You