Erreur lors de l'adaptation

Résolu
Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019 - 18 juin 2017 à 10:42
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 20 juin 2017 à 18:58
Bonjour,
J'ai crée un système de lignes à la gauche de mon RichTextBox via une méthode disponible ici : https://pradeep1210.wordpress.com/2010/02/01/vb-net-textbox-with-line-numbers/
Problème : lorsque j'arrive en bas de mon RichTextBox avec le curseur de selection, je fais entrer pour la 57ème ligne et là, Visual Studio me dit que la Value de VerticalScroll doit être entre 'minimum' et 'maximum'. J'ai donc essayé de faire
Panel1.VerticalScroll.Maximum = 99999999
, mais lorsque j'exécute, aucun changement.
Aidez-moi SVP !
Merci d'avance.
Renaud

6 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
18 juin 2017 à 13:12
Bonjour

merci de copier ton code sur ce post, en utilisant les balises de coloration (procédure ici)
0
Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019
Modifié le 18 juin 2017 à 14:56
Voilà le code :
Code lorsque l'on change le texte de la RichTextBox :
Private Sub CodeCS_TextChanged(sender As Object, e As EventArgs) Handles CodeCS.TextChanged
        CodeCS.ForeColor = Color.FromName("WindowText")
        
        ' Lignes sur le côté.
        SyncLineNumbers()
        Dim newHeight As Integer = lbLines.ItemHeight * lbLines.Items.Count
        If newHeight > panelIDE.Height Then
            lbLines.Height = newHeight
            CodeCS.Height = newHeight
        End If
        ' Lignes sur le côté lors du déplacement lorsque l'on tape du texte.
        lbLines.SelectedIndex = CodeCS.GetLineFromCharIndex(CodeCS.SelectionStart)
End Sub

SyncLineNumbers :
Private Sub SyncLineNumbers()
        ' Code pour synchroniser les lignes avec la RichTextBox.
        If CodeCS.Lines.Count <> lbLines.Items.Count Then
            Do While CodeCS.Lines.Count > lbLines.Items.Count
                lbLines.Items.Add((lbLines.Items.Count + 1).ToString)
            Loop
            Do While CodeCS.Lines.Count < lbLines.Items.Count
                lbLines.Items.RemoveAt(lbLines.Items.Count - 1)
            Loop
        End If
    End Sub

Code lorsqu'on relève une touche :
Private Sub CodeCS_KeyUp(sender As Object, e As KeyEventArgs) Handles CodeCS.KeyUp
        ' Lignes sur le côté lors du déplacement via les touches du clavier.
        lbLines.SelectedIndex = CodeCS.GetLineFromCharIndex(CodeCS.SelectionStart)
        Try
            If lbLines.Items.Count > panelIDE.Height \ lbLines.ItemHeight Then
                panelIDE.VerticalScroll.Maximum = 99999999
                panelIDE.VerticalScroll.Value = lbLines.ItemHeight * lbLines.SelectedIndex
            End If
        Catch

        End Try
    End Sub



CodeCS correspond à mon RichTextBox.
lbLines correspond à ma ListBox
panelIDE correspond au panel regroupant les deux éléments ci-dessus.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
18 juin 2017 à 21:44
Juste à la lecture, il ne faut pas mettre
panelIDE.VerticalScroll.Maximum = 99999999
là ou tu l'as mis.
Tu peux soit remplir directement la fenêtre de propriété en mode design, soit mettre cette ligne dans le Load de ta form.

Je teste et je reviens vers toi
0
Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019 > Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024
18 juin 2017 à 22:38
J'ai ajouté directement dans le Fichier.Designer.vb car la propriété n'est pas listée dans la liste de propriétés de vs2017.
Résultats du test : Toujours la même chose, et si je met dans un Try Catch pour tester ce qui ne va pas, à partir de la 57, soit la dernière disponible selon la hauteur, bien quand j'ajoute des lignes, elles s'ajoutent plus. PS : la police est Courier New en 9,75! (10pt).

Et le code VerticalScroll.Maximum c'est le code que j'ai utilisé pour tester un truc mais ça n'a rien changé non plus

Pour ton bug lorsque on démarre avec une rtb vide, il suffit d'empêcher qu'elle soit vide : si elle est vide alors on lui remet un texte bidon du style un espace.

help plz
0
Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019
18 juin 2017 à 22:40
Si tu ne comprend pas je t'enverrai une vidéo.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
18 juin 2017 à 22:03
Je ne reproduis pas ton bug.
Par contre si je démarre avec un richtextbox vide, j'ai un autre bug.
J'ai mis du texte pour débuter.

0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
18 juin 2017 à 22:51
Pas besoin d'une vidéo.
J'ai VS2013, donc je ne peux pas préjugé du comportement de 2017.
Par contre, je suis surpris que la propriété ne soit pas accessible depuis la fenêtre idoine.

Pour le texte vide, c'est bien ce que j'ai fait, comme je te l'ai écrit.

As tu mis les différentes propriétés des 3 contrôles comme spécifié dans le tuto?

0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
19 juin 2017 à 18:44
bonjour Whismeril

Avec Visual Studio Community 2017 la "propriété" VerticalScroll d'un Panel n'est pas visible en mode Conception de l'interface ( Design) mais elle est accessible par code
il faut comprendre que ce n'est pas véritablement une propriété mais un "contrôle" Scrollbar qui est greffé sur le Panel et Maximum est une véritable propriété de cette ScrollBar vertical
0
Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019
19 juin 2017 à 07:15
Oui, à part la BorderStyle du panel je l'ai mis en none que en Fixed3D mais aucune différence je pense, c'est des bordures et la Width de la ListBox mais aucune différence de toute façon tous les nombres jusque 99999999 rentrent dedans, j'ai essayé manuellement.

Je tiens à rappeller le problème : La Value de VerticalScroll doit être entre 'minimum' et 'maximum', le nombre 896 est trop grand. , j'ai regardé dans l'endroit en bas à droite des variables, et la variable 'maximum' doit s'override toute seule, ou bien on ne peux pas la set.

Et aussi il y a réellement peu de différences au niveau de l'interface de vs2013 et vs2015/7, ayant testé les trois.

Je vais t'envoyer une vidéo car mes explications sont pas très claires et un peu trop longues...
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
19 juin 2017 à 08:52
Franchement la vidéo c'est pas la peine.
Et je ne perdrai pas mon temps à la regarder si tu la postes quand même.

Par contre ce qui serait utile c'est de savoir à quelle ligne ça bug et quel est le contenu des variables a ce moment là.
0
Renaud42_ > Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024
19 juin 2017 à 09:37
Ça bug des que je fais entrée à 58éme ligne ça génére un but à la ligne
panelIDE.VerticalScroll.Value = lbLines.ItemHeWright * lbLines.SelectedIndex

La je suis en cours mais il me semble que le contenu de la variable était de 897.
0
Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019 > Renaud42_
Modifié le 19 juin 2017 à 12:59
Je vais reformuler :
Lorsque à la 57ème ligne du RichTextBox, je fais entrée pour une 58ème ligne, cela génère un bug à la ligne
panelIDE.VerticalScroll.Value = lbLines.ItemHeWright * lbLines.SelectedIndex

, c'est surligné en vert et il me dit que la valeur '896' n'est pas valide pour 'Value. 'Value' doit être entre 'minimum' et 'maximum'.d'ailleurs pour la taille en hauteur du Panel : 354 et la hauteur du RichTextBox et de la ListBox (les mêmes hauteurs) : 351. J'utilise pour la police : New Font("Courier New", 9.75!).
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656 > Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019
19 juin 2017 à 14:17
Et que vaut Maximum à ce moment là?
0
Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019 > Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024
19 juin 2017 à 16:02
Mini = 0, maxi = 100
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 20 juin 2017 à 10:08
Bonjour

Sur mon projet test je n'ai aucun décalage même après affichage de 10000 lignes fait dans une boucle au Form_Load de la Form ( voir image ci-jointe)
Quelle police utilises-tu et quelle taille ?


Par contre j'ai essayé différentes polices et certaines provoquent un décalage

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
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 20 juin 2017 à 11:02
La font "Microsoft sans Serif,8.25" ne provoque aucun décalage : c'est celle utilisée sur l'image plus haut
Testez d'autres polices pour voir celles qui ne provoquent point de décalage
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 20 juin 2017 à 12:52
Rebonjour

Ici plus aucun souci avec les polices pourvu que ce soient exactement les mêmes des 2 côtés
La Listbox d'origine est maintenant une RichTextbox mais j'ai gardé son nom en Listbox1 car elle simule la listbox
ainsi plus de décalage quelle que soit la police utilisée
Enlèves la boucle For dans le Form_Load pour l'utiliser ( elle me servait pour les tests)
Les 2 Sub Listbox1_Textchanged et Listbox1.Click bloquent toutes modifications dans la Listbox1 si on y amène le curseur dessus et que l'on modifie les numéros de lignes

Le nouveau code


Public Class Form1

Const EM_GETSCROLLPOS As Integer = 1245
Const EM_SETSCROLLPOS As Integer = 1246
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, ByRef lParam As Point) As Integer

Private Liste As New List(Of Integer)
Private Chaine As String

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

RichTextBox1.Text = String.Empty
Listbox1.Text = String.Empty
For i = 0 To 1000
RichTextBox1.Text = RichTextBox1.Text & (i + 1).ToString & Environment.NewLine
Next

End Sub

Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged

SyncLineNumbers()
SynchroText()

End Sub

Private Sub SyncLineNumbers()

If RichTextBox1.Lines.Count <> Liste.Count Then
Do While RichTextBox1.Lines.Count > Liste.Count
Liste.Add((Liste.Count + 1).ToString)
Loop
Do While RichTextBox1.Lines.Count < Liste.Count
Liste.RemoveAt(Liste.Count - 1)
Loop
Chaine = String.Join(Environment.NewLine, Liste)
Listbox1.Text = chaine
End If

End Sub

Private Sub RichTextBox1_VScroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.VScroll

SynchroText()

End Sub

Private Sub SynchroText()

Dim pt As Point
SendMessage(RichTextBox1.Handle, EM_GETSCROLLPOS, 0, pt)
SendMessage(Listbox1.Handle, EM_SETSCROLLPOS, 0, pt)

End Sub

Private Sub Listbox1_TextChanged(sender As Object, e As EventArgs) Handles Listbox1.TextChanged

Listbox1.Text = Chaine
SynchroText()

End Sub

Private Sub Listbox1_Click(sender As Object, e As EventArgs) Handles Listbox1.Click

Chaine = Listbox1.Text

End Sub

End Class


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
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
20 juin 2017 à 13:23
0
Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
20 juin 2017 à 18:56
Nickel ! Merci énormément à tous ceux qui m'ont aidés vous êtes géniaux.
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > Renaud42_ Messages postés 72 Date d'inscription dimanche 18 juin 2017 Statut Membre Dernière intervention 18 décembre 2019
20 juin 2017 à 18:58
De rien
Penses à mettre le sujet en "résolu"
0
Rejoignez-nous