Solved

Printing in VB.net

Posted on 2009-04-12
6
2,170 Views
Last Modified: 2013-12-26
I have a form with a PictureBox in it.  The PictureBox has controls paced over it.  The PictureBox is the parent to the controls.  The PictureBox is larger than the form and I use a ScrollBar to scroll down to view the entire PictureBox.  I can use the following function and print the PictureBox, but not the controls on it.  Since the PictureBox is larger than my screen, I cannot do a print screen.  The idea was to take the document and make the form look exactly the same as the document, so I just created controls in the positions over the picture. I do not have to use a PictureBox, as I just used it to get the controls placed in the correct positions.  Any help is appreciated!!
PrintPreviewDialog1.Document = PrintDocument2

        PrintPreviewDialog1.ShowDialog()

 

 

    Private Sub PrintDocument2_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument2.PrintPage

        e.PageSettings.Color = False

        e.Graphics.DrawImage(PictureBox2.Image, e.PageBounds.X, e.PageBounds.Y, 897, 1114)

    End Sub

Open in new window

Screenshot.png
0
Comment
Question by:joshbennett04
  • 3
  • 2
6 Comments
 
LVL 85

Expert Comment

by:Mike Tomlinson
Comment Utility
What version VB.Net?
0
 
LVL 15

Accepted Solution

by:
oobayly earned 500 total points
Comment Utility
If you host all your controls in a ScrollableControl, ie a Panel, you can then call this method to render the control. Make sure the container control is big enough to display the largest child control, though in your case this shouldn't be an issue.

The screenshot shows a pane (top control) containg several child controls, and a picturebox displaying the rendered panel.
Private Function DrawControl(ByVal container As ScrollableControl) As Bitmap

    ' Create a bitmap with the display bounds of the container

    Dim img As New Bitmap(container.DisplayRectangle.Width, container.DisplayRectangle.Height)

    Dim g As Graphics = Graphics.FromImage(img)

    

    ' Draw each control onto the bitmap

    For Each child As Control In container.Controls

        ' Scroll the child control into view

        container.ScrollControlIntoView(child)

        

        ' Draw the child control onto a temporary bitmap

        Dim tmp As New Bitmap(child.Width, child.Height)

        child.DrawToBitmap(tmp, New Rectangle(0, 0, child.Width, child.Height))

        

        ' Draw the temporary bitmap to the main bitmap, taking into account

        ' that the container has been scrolled

        g.DrawImage(tmp, child.Left - container.AutoScrollPosition.X, child.Top - container.AutoScrollPosition.Y)

        

        tmp.Dispose()

    Next

    g.Flush()

    g.Dispose()

    

    Return img

End Function

Open in new window

example.png
0
 
LVL 1

Author Comment

by:joshbennett04
Comment Utility
That looks pretty promising, I will give it a shot tomorrow
0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 
LVL 1

Author Comment

by:joshbennett04
Comment Utility
vs2008 btw
0
 
LVL 1

Author Comment

by:joshbennett04
Comment Utility
Feel pretty stupid now that I know how to do that.. Worked perfectly.

Thanks!
0
 
LVL 15

Expert Comment

by:oobayly
Comment Utility
To be fair, I went through several iterations getting the correct canvas area, and making sure the controls were rendered in the correct position, so I would abuse yourself too much :-)
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

When designing a form there are several BorderStyles to choose from, all of which can be classified as either 'Fixed' or 'Sizable' and I'd guess that 'Fixed Single' or one of the other fixed types is the most popular choice. I assume it's the most p…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now