Torna al Thread

Private Sub tuoPrintDocument_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles tuoPrintDocument.PrintPage 'Crea un'immagine su cui disegnare Dim bmp As New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height) 'Ottiene il grafico della bitmap per poterci disegnare Using g As Graphics = Graphics.FromImage(bmp) 'Colora lo sfondo dell'immagine del colore della Form g.Clear(Me.BackColor) End Using 'Ordina i controlli in base allo z-order pictureBoxes.Sort(AddressOf SortByZOrder) labels.Sort(AddressOf SortByZOrder) 'Cicla fra tutte le immagini For Each img As PictureBox In pictureBoxes 'e le disegna sulla bitmap img.DrawToBitmap(bmp, img.Bounds) Next 'Cicla fra tutte le label For Each lab As Label In labels 'E le disegna sull'immagine lab.DrawToBitmap(bmp, lab.Bounds) Next 'Disegna l'immagine sulla pagina da stampare e.Graphics.DrawImage(bmp, 0, 0) End Sub Function SortByZOrder(ByVal a As Control, ByVal b As Control) As Integer 'Se i due controlli non si sovrappongono ritorna 0 If Not a.Bounds.IntersectsWith(b.Bounds) Then Return 0 End If 'Se invece i controlli si sovrappongono, determina qual è quello che sta più in alto 'Ottiene il rettangolo di intersezione Dim intersect As Rectangle = Rectangle.Intersect(a.Bounds, b.Bounds) 'Ottiene un punto interno al rettangolo Dim pt As New Point(intersect.Left + intersect.Width / 2, intersect.Top + intersect.Height / 2) 'Crea una lista temporanea di controlli precedenti i due in ordine-z Dim tmp As New List(Of Control) 'Ottiene il controllo superiore finchè non è uno dei due a o b Dim top As Control Do 'Ottiene il controllo più in alto top = Me.GetChildAtPoint(pt, GetChildAtPointSkip.Invisible) 'Se non è nè a nè b, rende momentaneamente invisibile il controllo If (top IsNot a AndAlso top IsNot b) Then top.Visible = False tmp.Add(top) Else Exit Do End If Loop 'Adesso rende di nuovo visibili i controlli For Each ctr As Control In tmp ctr.Visible = True Next 'Ritorna 1 se il controllo è a, -1 se è b If top Is a Then Return 1 ElseIf top Is b Then Return -1 End If Return 0 End Function
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5