tititrivis
Messages postés5Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 2 janvier 20071 26 oct. 2006 à 10:26
pour comprendre otn pb il faut comprendre l'utilisation de hasMorePages.
Lorsque tu mets hasMorePages à vrai la procédure print de ton document va etre rapelée, donc si entre temps tu changes rien sa va tourné en boucle infiniment.
Pour résoudre ton pb regarde si il te reste des choses a imprimer et dans ce cas met hasmorepage a vrai, sinon met le à faux...
poilusduboux
Messages postés83Date d'inscriptionjeudi 19 mai 2005StatutMembreDernière intervention17 juin 2011 27 oct. 2006 à 10:28
Bonjour à tous
je planne toujours
je dois présenter mon soft LUNDI...
voici mon code pour imprimer un Datagrid avec VB.net
Private oStringFormat
As StringFormat
Private oStringFormatComboBox
As StringFormat
Private oButton
As Button
Private oCheckbox
As CheckBox
Private oComboBox
As ComboBox
Private nTotalWidth
As Int16
Private nRowPos
As Int16
Private NewPage
As
Boolean
Private nPageNo
As Int16
Private Header
As
String =
"Liste des plans"
Private sUserName
As
String =
"MonSoft"
Private
Sub PrintDocument1_PrintPage(
ByVal sender
As System.Object,
ByVal e
As System.Drawing.Printing.PrintPageEventArgs)
Handles PrintDocument1.PrintPageoStringFormat New StringFormatoStringFormat.Alignment StringAlignment.Near
oStringFormatComboBox.Trimming = StringTrimming.EllipsisCharacter
oButton New ButtonoCheckbox New CheckBoxoComboBox New ComboBoxnTotalWidth 0
For
Each oColumn
As DataGridViewColumn
In DataGridView1.ColumnsnTotalWidth += oColumn.Width
NextnPageNo = 1
NewPage TruenRowPos 0
Static oColumnLefts
As
New ArrayList
Static oColumnWidths
As
New ArrayList
Static oColumnTypes
As
New ArrayList
Static nHeight
As Int16
Dim nWidth, i, nRowsPerPage
As Int16
Dim nTop
As Int16 = e.MarginBounds.Top
Dim nLeft
As Int16 = e.MarginBounds.Left
If nPageNo = 1
Then
For
Each oColumn
As DataGridViewColumn In DataGridView1.ColumnsnWidth CType(Math.Floor(oColumn.Width / nTotalWidth * nTotalWidth * (e.MarginBounds.Width / nTotalWidth)), Int16)nHeight e.Graphics.MeasureString(oColumn.HeaderText, oColumn.InheritedStyle.Font, nWidth).Height + 11
oColumnLefts.Add(nLeft)
oColumnWidths.Add(nWidth)
oColumnTypes.Add(oColumn.GetType)
nLeft += nWidth
Next
End
If
Do
While nRowPos < DataGridView1.Rows.Count - 1
Dim oRow
As DataGridViewRow = DataGridView1.Rows(nRowPos)
If nTop + nHeight >= e.MarginBounds.Height + e.MarginBounds.Top
ThenDrawFooter(e, nRowsPerPage)
NewPage =
TruenPageNo += 1
e.HasMorePages =
True
Exit
Sub
Else
If NewPage
Then
' Draw Header
'e.Graphics.DrawString(Header, New Font(DataGridView1.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top - e.Graphics.MeasureString(Header, New Font(DataGridView1.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13)
'Draw(Columns)nTop = e.MarginBounds.Top
i = 0
For
Each oColumn
As DataGridViewColumn
In DataGridView1.Columnse.Graphics.FillRectangle(
New SolidBrush(Drawing.Color.LightGray),
New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))e.Graphics.DrawRectangle(Pens.Black,
New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))e.Graphics.DrawString(oColumn.HeaderText, oColumn.InheritedStyle.Font,
New SolidBrush(oColumn.InheritedStyle.ForeColor),
New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)i += 1
NextNewPage =
False
End
IfnTop += nHeight
i = 0
For
Each oCell
As DataGridViewCell
In oRow.Cells
If oColumnTypes(i)
Is
GetType(DataGridViewTextBoxColumn)
OrElse oColumnTypes(i)
Is
GetType(DataGridViewLinkColumn)
Thene.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font,
New SolidBrush(oCell.InheritedStyle.ForeColor),
New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)
ElseIf oColumnTypes(i)
Is
GetType(DataGridViewButtonColumn)
ThenoButton.Text = oCell.Value.ToString
oButton.Size =
New Size(oColumnWidths(i), nHeight)
Dim oBitmap
As
New Bitmap(oButton.Width, oButton.Height)oButton.DrawToBitmap(oBitmap,
New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))e.Graphics.DrawImage(oBitmap,
New Point(oColumnLefts(i), nTop))
ElseIf oColumnTypes(i)
Is
GetType(DataGridViewCheckBoxColumn) ThenoCheckbox.Size New Size(14, 14)oCheckbox.Checked
CType(oCell.Value,
Boolean)
Dim oBitmap
As
New Bitmap(oColumnWidths(i), nHeight)
Dim oTempGraphics
As Graphics = Graphics.FromImage(oBitmap)oTempGraphics.FillRectangle(Brushes.White,
New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))oCheckbox.DrawToBitmap(oBitmap,
Philou30290
Messages postés1Date d'inscriptionjeudi 22 juillet 2010StatutMembreDernière intervention29 juillet 2010 29 juil. 2010 à 16:10
Salut à tous,
j'ai galèré un peu pour utiliser la fonction Hasmorepages. J'ai quand même réussi à imprimer plusieurs pages d'une lisbox. L'astuce consistant à sauvegarder les compteurs de boucles dans des variables qui, quand la routine est rappelée par la fonction HasmorePages recharge les compteurs. Je vous joins mon bout de code sachant qu'avant l'appel de la routine d'impression deux variables sont initialisées, à savoir:
pageencours = 0
CompteurItem = 0
impression.Print()
Bon courage !!!!
Private Sub impression_page(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
' routine d'impression a propremment dit
Dim TailleMax, HauteurLigne As Single
Dim LigneParpage As Int32
Dim Police As New Font("Arial", 12)
Dim Xpos As Single = 50.0F
Dim Ypos As Single
Dim Yposhaut As Single = 50.0F
Dim CompteurLigne As Int32
Dim cmpt As Int32
HauteurLigne = e.Graphics.MeasureString("E", Police).Height
LigneParpage = CInt(e.MarginBounds.Height / HauteurLigne) - 1
For Each Element As Object In ListBox1.Items
TailleMax = CSng(IIf(TailleMax < e.Graphics.MeasureString(Element.ToString, Police).Width, e.Graphics.MeasureString(Element.ToString, Police).Width, TailleMax))
Next
Ypos = Yposhaut
e.Graphics.DrawString("AAAAAAA - Impression de la sélection", Police, Brushes.Black, Xpos, Ypos)
Yposhaut = 100
CompteurLigne = 0
pageencours = pageencours + 1