Je suis désespérément à la recherche d’un petit bout de code me permettant d’imprimer le contenu d’un ListView.
J’ai essayé ceci mais sans succès, l’impression se lance bien, mais la page reste vierge :
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
PrintDocument1.PrintPage
Dim myPaintArgs As New PaintEventArgs(e.Graphics, New Rectangle(New Point(0, 0), Me.Size))
Me.InvokePaint(lstv, myPaintArgs)
End Sub
Puis dans un bouton :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PrintDocument1.DefaultPageSettings.Landscape = True
Dim dllg As New PrintPreviewDialog()
dllg.Document = PrintDocument1
dllg.ShowDialog()
Dim dlg As New PrintDialog()
dlg.Document = PrintDocument1
Dim result As DialogResult = dlg.ShowDialog()
If (result = System.Windows.Forms.DialogResult.OK) Then
PrintDocument1.Print()
End If
End Sub
Il semblerait qu’il ne soit pas possible de récupérer ou d’imprimer des données venant d’un ListView (peu être en utilisant des api) mais là trop compliqué pour moi. Le seul moyen que j’ai trouver, c’est de les stocker dans un tableau a colonne de type string (désoler c’est du C#), toutes les valeurs que tu met dans le listview ainsi tu peu les récupérer plus tard
string[,] tableau = new string[2, 2];
private void Button1_Click(object sender, EventArgs e)
{
tableau[1, 1] = Form1.Text;
tableau[1, 2] = textbox1.Text;
tableau[2, 1] = textbox2.Text;
// Et après tu récupere les données
textbox3.Text = tableau[1, 1] + tableau[1, 2];
}
Comme tu le dis, iln’y a pas de solution “clef en main” j’ai trouvé le code ci-dessous je ne sais où hier, et ça marche. Cela consiste à convertir chaque cellule du listview en label, puis à l’imprimer.
'Méthode Utilisé une fois par page
'tu l'appelle dans l'évenement : Private Sub PP_PrintPage(sender As Object,
ev As PrintPageEventArgs)
Public Sub PrintListView(ByRef e As Drawing.Printing.PrintPageEventArgs,
ByVal Position As Drawing.Rectangle, ByVal Lst As ListView, Optional ByVal
NewPrint As Boolean = False, Optional ByVal RepeatFirstCol As Boolean =
False)
Static Cl, Ln As Integer
Dim LbTmp As New Label
Dim nbCol, LeftPos, TopPos As Integer
Dim It As ListViewItem
If NewPrint Then
Cl = 0
Ln = 0
End If
LeftPos = Position.Left
TopPos = Position.Top
'Colonne
If Cl = Lst.Columns.Count Then Cl = 0
If RepeatFirstCol And Cl <> 0 Then
LbTmp.Text = Lst.Columns(0).Text
Select Case Lst.Columns(0).TextAlign
Case HorizontalAlignment.Center
LbTmp.TextAlign = ContentAlignment.MiddleCenter
Case HorizontalAlignment.Left
LbTmp.TextAlign = ContentAlignment.MiddleLeft
Case HorizontalAlignment.Right
LbTmp.TextAlign = ContentAlignment.MiddleRight
End Select
LbTmp.Width = Lst.Columns(0).Width
LbTmp.Left = LeftPos
LbTmp.Top = TopPos
LbTmp.BackColor = Color.LightGray
LbTmp.Font = Lst.Font
LbTmp.BorderStyle = BorderStyle.FixedSingle
PrintLabel(LbTmp, e)
LeftPos += Lst.Columns(0).Width
End If
For I As Integer = Cl To Lst.Columns.Count - 1
LbTmp.Text = Lst.Columns(I).Text
Select Case Lst.Columns(I).TextAlign
Case HorizontalAlignment.Center
LbTmp.TextAlign = ContentAlignment.MiddleCenter
Case HorizontalAlignment.Left
LbTmp.TextAlign = ContentAlignment.MiddleLeft
Case HorizontalAlignment.Right
LbTmp.TextAlign = ContentAlignment.MiddleRight
End Select
LbTmp.Width = Lst.Columns(I).Width
LbTmp.Left = LeftPos
LbTmp.Top = TopPos
LbTmp.BackColor = Color.LightGray
LbTmp.Font = Lst.Font
LbTmp.BorderStyle = BorderStyle.FixedSingle
PrintLabel(LbTmp, e)
LeftPos += Lst.Columns(I).Width
If I = Lst.Columns.Count - 1 Then
nbCol = I
Else
If LeftPos + Lst.Columns(I + 1).Width > Position.Width +
Position.Left Then
nbCol = I
Exit For
End If
End If
Next
'LIGNE
TopPos += LbTmp.Height
For J As Integer = Ln To Lst.Items.Count - 1
It = Lst.Items(J)
LeftPos = Position.Left
If RepeatFirstCol And Cl <> 0 Then
LbTmp.Text = It.Text
Select Case Lst.Columns(0).TextAlign
Case HorizontalAlignment.Center
LbTmp.TextAlign = ContentAlignment.MiddleCenter
Case HorizontalAlignment.Left
LbTmp.TextAlign = ContentAlignment.MiddleLeft
Case HorizontalAlignment.Right
LbTmp.TextAlign = ContentAlignment.MiddleRight
End Select
LbTmp.Width = Lst.Columns(0).Width
LbTmp.Left = LeftPos
LbTmp.Top = TopPos
LbTmp.BackColor = It.BackColor
LbTmp.ForeColor = It.ForeColor
LbTmp.Font = Lst.Font
LbTmp.BorderStyle = BorderStyle.FixedSingle
PrintLabel(LbTmp, e)
LeftPos += LbTmp.Width
End If
For I As Integer = Cl To nbCol
Dim Sb As ListViewItem.ListViewSubItem = It.SubItems(I)
LbTmp.Text = Sb.Text
Select Case Lst.Columns(I).TextAlign
Case HorizontalAlignment.Center
LbTmp.TextAlign = ContentAlignment.MiddleCenter
Case HorizontalAlignment.Left
LbTmp.TextAlign = ContentAlignment.MiddleLeft
Case HorizontalAlignment.Right
LbTmp.TextAlign = ContentAlignment.MiddleRight
End Select
LbTmp.Width = Lst.Columns(I).Width
LbTmp.Left = LeftPos
LbTmp.Top = TopPos
If Not It.UseItemStyleForSubItems Then
LbTmp.BackColor = Sb.BackColor
LbTmp.ForeColor = Sb.ForeColor
LbTmp.Font = Sb.Font
Else
LbTmp.BackColor = It.BackColor
LbTmp.ForeColor = It.ForeColor
LbTmp.Font = It.Font
End If
LbTmp.Font = Lst.Font
LbTmp.BorderStyle = BorderStyle.FixedSingle
PrintLabel(LbTmp, e)
LeftPos += LbTmp.Width
Next
TopPos += LbTmp.Height
If J = Lst.Items.Count - 1 Then
If nbCol < Lst.Columns.Count - 1 Then
e.HasMorePages = True
Cl = nbCol + 1
End If
Else
If TopPos > Position.Top + Position.Height Then
If nbCol < Lst.Columns.Count - 1 Then
e.HasMorePages = True
Cl = nbCol + 1
Exit For
Else
e.HasMorePages = True
Ln = J + 1
Cl = 0
Exit For
End If
End If
End If
Next
End Sub
__________________________________
Public Sub PrintLabel(ByVal Lb As Label, ByVal E As
System.Drawing.Printing.PrintPageEventArgs)
Dim RecF As New RectangleF(Lb.Left, Lb.Top, Lb.Width, Lb.Height)
'BackGround
E.Graphics.FillRectangle(New SolidBrush(Lb.BackColor), RecF)
'Bordure
Select Case Lb.BorderStyle
Case BorderStyle.FixedSingle
E.Graphics.DrawRectangle(System.Drawing.Pens.Black, Lb.Left,
Lb.Top, Lb.Width, Lb.Height)
Case BorderStyle.Fixed3D
End Select
'TEXT
Dim F As New System.Drawing.StringFormat
Select Case Lb.TextAlign
Case ContentAlignment.BottomCenter
F.Alignment = StringAlignment.Center
F.LineAlignment = StringAlignment.Far
Case ContentAlignment.BottomLeft
F.Alignment = StringAlignment.Near
F.LineAlignment = StringAlignment.Far
Case ContentAlignment.BottomRight
F.Alignment = StringAlignment.Far
F.LineAlignment = StringAlignment.Far
Case ContentAlignment.MiddleCenter
F.Alignment = StringAlignment.Center
F.LineAlignment = StringAlignment.Center
Case ContentAlignment.MiddleLeft
F.Alignment = StringAlignment.Near
F.LineAlignment = StringAlignment.Center
Case ContentAlignment.MiddleRight
F.Alignment = StringAlignment.Far
F.LineAlignment = StringAlignment.Center
Case ContentAlignment.TopCenter
F.Alignment = StringAlignment.Center
F.LineAlignment = StringAlignment.Near
Case ContentAlignment.TopLeft
F.Alignment = StringAlignment.Near
F.LineAlignment = StringAlignment.Near
Case ContentAlignment.TopRight
F.Alignment = StringAlignment.Far
F.LineAlignment = StringAlignment.Near
End Select
E.Graphics.DrawString(Lb.Text, Lb.Font, New
SolidBrush(Lb.ForeColor), RecF, F)
End Sub
__________________________________