Comparaison 2 chaines de caractère LB et impression

Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011 - 28 août 2010 à 01:19
Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011 - 29 août 2010 à 10:15
Bonsoir à tous,

Je viens chercher de l'aide car j'ai un petit problème. Voilà ce que je souhaite faire avec mon programme :

J'ai 2 listbox : listbox3 remplie avec un dataset et l'autre (listbox4) remplie avec une textbox. Sur le formulaire il y a un bouton imprimer et quand on clique dessus, on imprime le contenu de listbox4. Jusque-là pas de souci mais la mise en page est un peu particulière car je ne veux pas simplement imprimer ligne par ligne.

Ce que je voudrais faire c'est :
1/ imprimer item de listbox4 sur une même ligne jusqu'à ce qu'un item corresponde à un item de listbox3
2/ à ce moment là : saut de ligne puis on recommence

J'ai fais ce petit code avec 2 boucles mais ça ne fonctionne pas :

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim cmptBox4, cmptBox3 As Single
        Dim Police As New Font("Book Antiqua", 11)
        Dim PoliceG As New Font("Book Antiqua", 11, FontStyle.Bold)
        Dim YPos As Single = 100
        Using MyGr As Graphics = e.Graphics
            Dim SautLigne As Single = MyGr.MeasureString("X", PoliceG).Height
            Dim i As Single = 1
            For cmptBox4 = 0 To ListBox4.Items.Count - 1
                Dim Longueur As Single = MyGr.MeasureString("Séance n° " & i & " :   ", Police).Width
                Dim bool As Boolean
                MyGr.DrawString("Séance n° " & i & " :   ", Police, Brushes.Black, 50, YPos)
                    For cmptBox3 = 0 To ListBox3.Items.Count - 1
                        bool = ListBox4.Items(cmptBox4).ToString.Equals(ListBox3.Items(cmptBox3).ToString)
                        If bool = True Then
                            MyGr.DrawString(ListBox4.Items(cmptBox4).ToString(), Police, Brushes.Black, 50 + Longueur, YPos)
                        End If
                    Next
                YPos = YPos + SautLigne
                i = i + 1
            Next
        End Using


J'espère avoir été assez clair, merci à ceux qui voudront bien m'aider.

3 réponses

Utilisateur anonyme
28 août 2010 à 16:42
Bonsoir,
Comme tu as écrit ta boucle, elle ne lit cmptBox4 qu'une seule fois et a chaque itération elle lit l'ensemble de cmptbox3
D'apres ce que tu cherche à faire ca serait plutôt l'inverse : lire cmptbox3 plusieurs fois et a chaque item comparer avec tous les items de cmptbox4
a bientôt
0
Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011
28 août 2010 à 23:02
Merci à toi mais ça ne marche pas plus... Je cherche...
0
Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011
29 août 2010 à 10:15
Ca y est j'y suis, j'ai trouvé comment faire !!
En fait j'ai finalement supprimer la boucle de recherche pour listbox3 et je l'ai remplacé par :

ListBox3.FindString(ListBox4.Items(cmptBox4).ToString)


Pour ceux que ça intéresse, au final mon code donne :

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim cmptBox4 As Single
        Dim Police As New Font("Book Antiqua", 10)
        Dim PoliceG As New Font("Book Antiqua", 10, FontStyle.Bold)
        Dim YPos As Single = 100
        Using MyGr As Graphics = e.Graphics
            Dim SautLigne As Single = MyGr.MeasureString("X", PoliceG).Height
            Dim i As Single = 1
            Dim Str As String = ""
            For cmptBox4 = 0 To ListBox4.Items.Count - 1
                Dim index As Integer = ListBox3.FindString(ListBox4.Items(cmptBox4).ToString)
                Dim Longueur As Single = MyGr.MeasureString("Séance n° " & i & " :   ", Police).Width
                Str = Str & " + " & ListBox4.Items(cmptBox4).ToString()
                If index <> -1 Then
                    MyGr.DrawString("Séance n° " & i & " :   ", PoliceG, Brushes.Black, 50, YPos)
                    Str = Strings.Right(Str, Len(Str) - 3)
                    MyGr.DrawString(Str, Police, Brushes.Black, 55 + Longueur, YPos)
                    YPos = YPos + SautLigne
                    Str = ""
                    i = i + 1
                End If
            Next
        End Using
    End Sub
0
Rejoignez-nous