Une partie du dessin ne s'affiche pas

Résolu
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 - 27 févr. 2017 à 17:59
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 - 2 mars 2017 à 22:10
Bonjour,
ça fait un moment que je n'ai pas eu de problème en codant une application l'application que je suis en train de créer consiste à remplir un une ListView et dessiner sur une Picturebox en même temps
le dessin peut être très long, alors j'ai opté pour la méthode suivante :
je mets la PictureBox1 dans un Panel et j'active la fonction AutoScroll du Panel (Panel.AutoScroll = True), comme ça je peux consulter tout le dessin
une partie de dessin ne s'affiche pas
voici le code :
    Dim i As Integer = 0
Dim X As Integer = 20
Dim F As Integer = 0
Dim Y1 As Integer = 20
Dim Y2 As Integer = 50
Dim AfficherDessin As Boolean = False
Dim Point_Appuis1 As Integer = 0
Dim Plus As Integer
'Remplire la ListVieW
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If i = 0 Then
ListViewEx1.Columns.Add("Valeur " & 0, 0, HorizontalAlignment.Center)
ListViewEx1.Items.Add("")
ListViewEx1.Columns.Add("Valeur " & 1, 100, HorizontalAlignment.Center)
ListViewEx1.Items(0).SubItems.Add(TextBox1.Text)
Plus = (Math.Round(CDbl(TextBox1.Text), 0) * 20)
ListViewEx1.Width = ListViewEx1.Width + 5
PictureBox1.Width = PictureBox1.Width + (Math.Round(CDbl(TextBox1.Text), 0) * 20)
ElseIf i > 0 Then
ListViewEx1.Width = ListViewEx1.Width + 100
ListViewEx1.Columns.Add("Valeur " & i + 1, 100, HorizontalAlignment.Center)
ListViewEx1.Items(0).SubItems.Add(TextBox1.Text)
Plus = (Math.Round(CDbl(TextBox1.Text), 0) * 20)
PictureBox1.Width = PictureBox1.Width + (Math.Round(CDbl(TextBox1.Text), 0) * 20)
End If
Panel2.AutoScrollPosition = New Point(Panel2.HorizontalScroll.Maximum, 0)
i = i + 1
ListViewEx1.OwnerDraw = True
PictureBox1.Invalidate()
AfficherDessin = True
TextBox1.Focus()
TextBox1.Clear()
X = F
End Sub


voici le tableau (ListView) :

'Dessin
Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
If AfficherDessin = True Then
'Dissiner les fleches
For Fleche_X As Integer = 20 To X + Plus Step 20
e.Graphics.DrawLine(New Pen(New SolidBrush(Color.Black), 2), Fleche_X, Y1, Fleche_X, Y2)
e.Graphics.FillPolygon(New SolidBrush(Color.Black), _
{New Point(Fleche_X, Y2 + 2), _
New Point(Fleche_X - 5, Y2 - 12), _
New Point(Fleche_X, Y2 - 8), _
New Point(Fleche_X + 4, Y2 - 12), _
New Point(Fleche_X, Y2 + 2)})
F = X + Plus
Next
e.Graphics.DrawLine(New Pen(New SolidBrush(Color.Black), 2), 20, Y1 + 1, F, Y1 + 1)
e.Graphics.DrawLine(New Pen(New SolidBrush(Color.Black), 2), 20, Y2 + 1, F, Y2 + 1)
'Dissiner le Triangle
For Appuis As Integer = 1 To i
Point_Appuis1 = Point_Appuis1 + Math.Round(CDbl(ListViewEx1.Items(0).SubItems(Appuis).Text), 0) * 20
Dim blackPen As New Pen(Color.Black, 1)
Dim pointA1 As New Point(Point_Appuis1, Y2)
Dim pointA2 As New Point(Point_Appuis1 - 10, Y2 + 15)
Dim pointA3 As New Point(Point_Appuis1 + 10, Y2 + 15)
Dim pointA4 As New Point(Point_Appuis1, Y2)
Dim curvePoints1 As Point() = {pointA1, pointA2, pointA3, pointA4}
e.Graphics.DrawPolygon(blackPen, curvePoints1)
Next
End If
End Sub

Voici comment le dessin s'affiche :

et Voici comment il doit être :

j'espère que j'ai bien expliquer (sinon je peux recommencer)
aidez moi s'il vous plaît à résoudre ce problème, et merci d'avance pour tout aide

4 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
27 févr. 2017 à 21:19
Bonjour
1) As-tu mis Option Explicit et Option Strict sur ton projet ?
2) As-tu enlevé l'importation de la référence Microsoft Visual Basic ?
Je crois que non
3)

Dim i As Integer = 0
Dim X As Integer = 20
Dim F As Integer = 0
Dim Y1 As Integer = 20
Dim Y2 As Integer = 50
Dim AfficherDessin As Boolean = False
Dim Point_Appuis1 As Integer = 0
Dim Plus As Integer

Mets plutôt des Private à la place des Dim car ces variables sont utilisées dans tout ton code au niveau de la Form et non dans une seule procédure . On réserve plutôt Dim aux variables ne servant que dans une seuls procédure ( Sub ou Function selon) .
4) les variables i et j sont généralement utilisées pour les boucles :
For i = 0 to 10

Hors tu utilises i comme compteur de colonnes si j'ai bien compris !
5) Mets un point d'arrèt sur
For Appuis As Integer = 1 To i
et regarde la valeur de i car ce sont juste les triangles qui ne s'affichent pas si j'ai bien compris
6) Peux-tu expliquer ce que tu veux faire exactement ? A quoi correspondent les valeurs de la listview et que représente le dessin de la PictureBox ?
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2
Modifié par Karin.code le 27/02/2017 à 22:03
Bonsoir Vb95
tout d'abord merci pour ta réponse
j'ai fait comme tu as suggéré dans la 1er, 2eme, 3eme, 4eme et 5eme remarque
dans la 5eme remarque quand je mets un point d'arrèt sur
For Appuis As Integer = 1 To i
et quand je clique sur le Button1 pour la première fois la valeur de N = 1 j'ai remplacer "i" par "N"
je clique sur le Button1 pour la deuxième fois la valeur de N = 2
je clique sur le Button1 pour la troisième fois la valeur de N =3

en génie civil on représente la poutre par le schéma statique suivant :


La poutre contient plusieurs travée, la listview contient la longueur de chaque travée en mètre
par exemple quand je tape dans la TextBox1 la valeur 5 m et je clique sur le Bouton1, la valeur 5 est ajouté à la ListView et en même temps un dessin s'affiche dans la PictureBox1 montrant la première Travée de longueur 5 m :

quand je tape la valeur 4.3 m et je clique sur le Bouton1, la valeur 4.3 est ajouté à la ListView et en même temps un dessin s'affiche dans la PictureBox1 (qui est la suite de dessin précédent) montrant la 1re et la 2eme Travée :

ainsi de suite
j'espère que j'ai bien expliqué
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 27/02/2017 à 23:49
Bonsoir
C'est 100 fois plus clair !
Ton problème est que les triangles ne s'affichent pas ? C'est bien ça ?
Je suppose aussi que la distance entre 2 triangles est proportionnelle à la longueur de la travée ou ce n'est pas obligatoire ?
Comment tu la remplis ta listview des longueurs de travées ?
J'ai une petite idée que je vais creuser et je te proposerais mieux : imagines que tu as rempli 5 travées et que tu as fait le dessin . Tu t'aperçois que tu t'es trompée dans la mesure de la seconde travée : aïe !
Je vais faire de mon côté un projet similaire au tien pour tester et je te dirais ensuite ce qu'il en est !
A plus Karine.code
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
27 févr. 2017 à 23:52
Bonsoir,
oui la distance entre 2 triangles est proportionnelle à la longueur de la travée
Merci pour ton aide
Bonne nuit vb95
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018
28 févr. 2017 à 13:53
bonjour Karin.code
comme promis je t'ai fait un petit projet !
une fois fignolé je vais le déposer sur le site à ton intention
A plus
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
28 févr. 2017 à 20:09
Bonsoir Vb95,
merci pour ton aide
j'attends avec impatience de voir le projet
A Plus
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018
Modifié par vb95 le 28/02/2017 à 20:57
comme promis : http://codes-sources.commentcamarche.net/source/101850-visualisation-poutres-avec-travees-en-genie-civil
tu décompresses le fichier .zip et tu as le projet !
Dis- moi ce que tu en penses
Une question : est-ce intéressant de pouvoir supprimer une travée en la sélectionnant dans la liste ?
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2
1 mars 2017 à 19:35
Bonsoir Vb95
non je ne crois pas que les Triangles sont masqués car hauteur de l'image est 400 Pixels et il reste beaucoup d'espace vide au-dessous du schéma

je ne veux pas abuser de ta gentillesse. J'ai pris beaucoup de ton temps (tu as fait presque tout le travail à ma place en fait tu as fait tout le travail à ma place), ça m'a pris toute la journée mais j'arrive pas à trouver où se situe mon erreur, tu vas peut-être dire que ce n'est pas pratique au que ce n'est pas utile mais je préfère que le tableau soit horizontal au lieu qu'il soit vertical comme le montre l'image plus plus haut
j'ai essayé de changer juste quelques parties sur le projet que tu m'as si gentiment Codé.
j'ai 2 problèmes, le premier est quand je modifie une valeur
par exemple j'entre 3 valeurs, je modifie la 2eme valeur et quand j'essaie d'entrer une 4eme valeur (je tape dans un textbox "ZoneSaisie" par exemple la valeur 9) et je clique sur la touche entrée la valeur 9 s'efface mais elle ne s'affiche pas dans le tableau jusqu'à ce que je la tape une deuxième fois, alors là elle s'affiche enfin dans le tableau même chose pour supprimer une valeur
par contre il y a pas de problème quand j'efface tout le temps


Voici le Projet :
http://www.cjoint.com/c/GCbsIQoPj2O
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 2/03/2017 à 01:59
Salut Karine
Je me suis encore bien amusé grâce à toi . Mais cela n'a pas été de la tarte !



comme tu vois sur l'image j'ai respecté ta disposition
- Le bouton "Modifier" n'est plus là car inutile
- la zone Saisie en haut sert à entrer des nouvelles travées au fur et à mesure
- la combobox te permet de sélectionner une travée par son numéro et sa valeur en mètre est dans la zone de modification
- une fois là tu peux supprimer la travée
- tu peux aussi modifier la valeur en mètre de cette travée dans la zone de modification . Une fois la touche Entrée tapée ( ce qui valide la zone de texte) les 2 boutons "Confirmer" et "Annuler" cette modification sont opérationnels .
Mais il faut dire que la listview n'est pas utilisée de manière normale ( on y met d'habitude une seule information par ligne : on travaille d'habitude au niveau de la ligne et non pas au niveau de la colonne)
Pour le projet toujours au même endroit : :http://codes-sources.commentcamarche.net/source/101850-visualisation-poutres-avec-travees-en-genie-civil
La facture va être salée lol !
A +

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2
2 mars 2017 à 09:30
Salut Vb95,
Merci infiniment pour ton aide
pour la facture tu peux la mettre dans la liste d'attente car je ne t'ai pas encore payé les factures précédentes lol
A+
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018
2 mars 2017 à 16:05
Vu que tu es une bonne cliente je te ferais un prix d'ami !
J'ai fait quelques modifications pour avoir un code plus clair et une meilleure gestion au niveau de la Combobox .
Toujours au même endroit : http://codes-sources.commentcamarche.net/source/101850-visualisation-poutres-avec-travees-en-genie-civil
Au plaisir
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
2 mars 2017 à 22:10
Bonsoir
C'est vrais, c'est plus claire
Merci beaucoup Vb95
A +
0
Rejoignez-nous